//
0x608060405234801561001057600080fd5b50611962806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631a36ed75146100515780635fe8c13b146100815780637448e7f9146100b1578063ff6fd6e6146100e1575b600080fd5b61006b60048036038101906100669190610d31565b610111565b6040516100789190610df0565b60405180910390f35b61009b60048036038101906100969190610e71565b61017b565b6040516100a89190610df0565b60405180910390f35b6100cb60048036038101906100c6919061108a565b6106fb565b6040516100d89190610df0565b60405180910390f35b6100fb60048036038101906100f691906110d3565b61081a565b6040516101089190610df0565b60405180910390f35b60006101708686866002878760405161012b929190611186565b602060405180830381855afa158015610148573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061016b91906111b4565b61081a565b905095945050505050565b6000610698565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4781106101b3576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816101e9576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915081610219576000805260206000f35b505050505050565b600060808601600087017f0bae4e8249e16a7a60ccd0215fbe09b3850e8c18213acdb7f3e778e83909cb5581527f295a20c060882ebb89c0339f67c0659b89ab239bfa1239943d6e73841804e11c60208201526102c460008801357f1b88e5dd5422d4c00bda2bc18bc9ac5aba22b30f81d6f6f68620226b984ac2667f094bd9c4b3869496bcf8ab0f733cc6b64243b5d408d09b701b16e7ddd124b17e846101b6565b61031460208801357f0f680c08630f998c5fac176e593c8c7ee279105baff2d93aeaed5a5add0ccfd67f2110dccdaf8ae02a1da45b139c06df34536f19e6826d66879420751a419c1a10846101b6565b61036460408801357f25ee06c4f9429471049948199b2973a538d9baff5425b52ce978bc88547ddc237f0e65c1c9ab69133c2e7399aa172eb5a89ccb7e7ba844a10f87c8cc729a0b3b79846101b6565b6103b460608801357f23fdad98b64dbcbc1866faf6f7da3d769c91699bb729c94271dc428811d95e517f0b7c7639a64cb5505831eb09e75d41862c63b1f3ec55fc432a60b989eeaad5a5846101b6565b833582527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208501357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020830152843560408301526020850135606083015260408501356080830152606085013560a08301527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e260c08301527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d192660e08301527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c6101008301527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab6101208301527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a76101408301527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8610160830152600088015161018083015260206000018801516101a08301527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220830152853561024083015260208601356102608301527f28f15945c0d350dc79c3fa9aeae56a7c6f70a38baaa48bbda19531ac056433796102808301527f14fc776a7ce28afa94649f38f373a61f64ac984c02eee7eb8a36e68ac69edfed6102a08301527f2b135a25ce834c21818185f0779ddaf65f831d6cb941d74a6e8a10ce1b0e05616102c08301527f2f41f6b9a171433f2a2eaa0442b6cc89785eddcbd269e2a4386dbd91f6253b846102e08301526020826103008460086107d05a03fa82518116935050505095945050505050565b60405161038081016040526106b06000840135610182565b6106bd6020840135610182565b6106ca6040840135610182565b6106d76060840135610182565b6106e46080840135610182565b6106f1818486888a610221565b8060005260206000f35b6000806000610715610710856020015161089c565b6109c0565b915091506000846000015180602001905181019061073391906113de565b90503073ffffffffffffffffffffffffffffffffffffffff16635fe8c13b82600001518360200151846040015160405180608001604052806f68e42d8b3ddc499f4e1799a767052ab381526020016f3802684f1645e0a028585b0445d392318152602001898152602001888152506040518563ffffffff1660e01b81526004016107c09493929190611639565b60206040518083038186803b1580156107d857600080fd5b505afa1580156107ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081091906116ac565b9350505050919050565b60008060405180604001604052808781526020016040518060a00160405280888152602001878152602001604051806040016040528060006002811115610864576108636116d9565b5b8152602001600060ff1681525081526020016000801b8152602001868152508152509050610891816106fb565b915050949350505050565b60006002806040516108ad90611754565b602060405180830381855afa1580156108ca573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906108ed91906111b4565b83606001518460000151856020015186608001516018886040015160000151600281111561091e5761091d6116d9565b5b63ffffffff16901b601889604001516020015160ff1663ffffffff16901b6008600461ffff16901b60405160200161095d989796959493929190611814565b6040516020818303038152906040526040516109799190611915565b602060405180830381855afa158015610996573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906109b991906111b4565b9050919050565b60008060006109d18460001c6109f5565b9050806fffffffffffffffffffffffffffffffff16608082901c9250925050915091565b600081905060087eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff8216901b60087fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff008316901c17905060107dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff8216901b60107fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00008316901c17905060207bffffffff00000000ffffffff00000000ffffffff00000000ffffffff8216901b60207fffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000008316901c179050604077ffffffffffffffff0000000000000000ffffffffffffffff8216901b60407fffffffffffffffff0000000000000000ffffffffffffffff00000000000000008316901c179050608081901b608082901c179050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610ba882610b5f565b810181811067ffffffffffffffff82111715610bc757610bc6610b70565b5b80604052505050565b6000610bda610b41565b9050610be68282610b9f565b919050565b600067ffffffffffffffff821115610c0657610c05610b70565b5b610c0f82610b5f565b9050602081019050919050565b82818337600083830152505050565b6000610c3e610c3984610beb565b610bd0565b905082815260208101848484011115610c5a57610c59610b5a565b5b610c65848285610c1c565b509392505050565b600082601f830112610c8257610c81610b55565b5b8135610c92848260208601610c2b565b91505092915050565b6000819050919050565b610cae81610c9b565b8114610cb957600080fd5b50565b600081359050610ccb81610ca5565b92915050565b600080fd5b600080fd5b60008083601f840112610cf157610cf0610b55565b5b8235905067ffffffffffffffff811115610d0e57610d0d610cd1565b5b602083019150836001820283011115610d2a57610d29610cd6565b5b9250929050565b600080600080600060808688031215610d4d57610d4c610b4b565b5b600086013567ffffffffffffffff811115610d6b57610d6a610b50565b5b610d7788828901610c6d565b9550506020610d8888828901610cbc565b9450506040610d9988828901610cbc565b935050606086013567ffffffffffffffff811115610dba57610db9610b50565b5b610dc688828901610cdb565b92509250509295509295909350565b60008115159050919050565b610dea81610dd5565b82525050565b6000602082019050610e056000830184610de1565b92915050565b600081905082602060020282011115610e2757610e26610cd6565b5b92915050565b600081905082604060020282011115610e4957610e48610cd6565b5b92915050565b600081905082602060040282011115610e6b57610e6a610cd6565b5b92915050565b6000806000806101808587031215610e8c57610e8b610b4b565b5b6000610e9a87828801610e0b565b9450506040610eab87828801610e2d565b93505060c0610ebc87828801610e0b565b925050610100610ece87828801610e4f565b91505092959194509250565b600080fd5b600080fd5b60038110610ef157600080fd5b50565b600081359050610f0381610ee4565b92915050565b600060ff82169050919050565b610f1f81610f09565b8114610f2a57600080fd5b50565b600081359050610f3c81610f16565b92915050565b600060408284031215610f5857610f57610eda565b5b610f626040610bd0565b90506000610f7284828501610ef4565b6000830152506020610f8684828501610f2d565b60208301525092915050565b600060c08284031215610fa857610fa7610eda565b5b610fb260a0610bd0565b90506000610fc284828501610cbc565b6000830152506020610fd684828501610cbc565b6020830152506040610fea84828501610f42565b6040830152506080610ffe84828501610cbc565b60608301525060a061101284828501610cbc565b60808301525092915050565b600060e0828403121561103457611033610eda565b5b61103e6040610bd0565b9050600082013567ffffffffffffffff81111561105e5761105d610edf565b5b61106a84828501610c6d565b600083015250602061107e84828501610f92565b60208301525092915050565b6000602082840312156110a05761109f610b4b565b5b600082013567ffffffffffffffff8111156110be576110bd610b50565b5b6110ca8482850161101e565b91505092915050565b600080600080608085870312156110ed576110ec610b4b565b5b600085013567ffffffffffffffff81111561110b5761110a610b50565b5b61111787828801610c6d565b945050602061112887828801610cbc565b935050604061113987828801610cbc565b925050606061114a87828801610cbc565b91505092959194509250565b600081905092915050565b600061116d8385611156565b935061117a838584610c1c565b82840190509392505050565b6000611193828486611161565b91508190509392505050565b6000815190506111ae81610ca5565b92915050565b6000602082840312156111ca576111c9610b4b565b5b60006111d88482850161119f565b91505092915050565b600067ffffffffffffffff8211156111fc576111fb610b70565b5b602082029050919050565b6000819050919050565b61121a81611207565b811461122557600080fd5b50565b60008151905061123781611211565b92915050565b600061125061124b846111e1565b610bd0565b9050806020840283018581111561126a57611269610cd6565b5b835b81811015611293578061127f8882611228565b84526020840193505060208101905061126c565b5050509392505050565b600082601f8301126112b2576112b1610b55565b5b60026112bf84828561123d565b91505092915050565b600067ffffffffffffffff8211156112e3576112e2610b70565b5b602082029050919050565b60006113016112fc846112c8565b610bd0565b9050806040840283018581111561131b5761131a610cd6565b5b835b818110156113445780611330888261129d565b84526020840193505060408101905061131d565b5050509392505050565b600082601f83011261136357611362610b55565b5b60026113708482856112ee565b91505092915050565b600061010082840312156113905761138f610eda565b5b61139a6060610bd0565b905060006113aa8482850161129d565b60008301525060406113be8482850161134e565b60208301525060c06113d28482850161129d565b60408301525092915050565b600061010082840312156113f5576113f4610b4b565b5b600061140384828501611379565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b61143581611207565b82525050565b6000611447838361142c565b60208301905092915050565b6000602082019050919050565b6114698161140c565b6114738184611417565b925061147e82611422565b8060005b838110156114af578151611496878261143b565b96506114a183611453565b925050600181019050611482565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b600081905092915050565b6114eb8161140c565b6114f581846114d7565b925061150082611422565b8060005b83811015611531578151611518878261143b565b965061152383611453565b925050600181019050611504565b505050505050565b600061154583836114e2565b60408301905092915050565b6000602082019050919050565b611567816114b7565b61157181846114c2565b925061157c826114cd565b8060005b838110156115ad5781516115948782611539565b965061159f83611551565b925050600181019050611580565b505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6115eb816115b5565b6115f581846115c0565b9250611600826115cb565b8060005b83811015611631578151611618878261143b565b9650611623836115d5565b925050600181019050611604565b505050505050565b60006101808201905061164f6000830187611460565b61165c604083018661155e565b61166960c0830185611460565b6116776101008301846115e2565b95945050505050565b61168981610dd5565b811461169457600080fd5b50565b6000815190506116a681611680565b92915050565b6000602082840312156116c2576116c1610b4b565b5b60006116d084828501611697565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f72697363302e526563656970744d657461000000000000000000000000000000600082015250565b600061173e601183611156565b915061174982611708565b601182019050919050565b600061175f82611731565b9150819050919050565b6000819050919050565b61178461177f82610c9b565b611769565b82525050565b600063ffffffff82169050919050565b60008160e01b9050919050565b60006117b28261179a565b9050919050565b6117ca6117c58261178a565b6117a7565b82525050565b600061ffff82169050919050565b60008160f01b9050919050565b60006117f6826117de565b9050919050565b61180e611809826117d0565b6117eb565b82525050565b6000611820828b611773565b602082019150611830828a611773565b6020820191506118408289611773565b6020820191506118508288611773565b6020820191506118608287611773565b60208201915061187082866117b9565b60048201915061188082856117b9565b60048201915061189082846117fd565b6002820191508190509998505050505050505050565b600081519050919050565b60005b838110156118cf5780820151818401526020810190506118b4565b838111156118de576000848401525b50505050565b60006118ef826118a6565b6118f98185611156565b93506119098185602086016118b1565b80840191505092915050565b600061192182846118e4565b91508190509291505056fea2646970667358221220ee2df3f9ff21b00697f6eeb51ad089a183dce35e0d30ca6a56db6acfa5ffc26964736f6c63430008090033