0x60806040523480156200001157600080fd5b506040516200270738038062002707833981016040819052620000349162000060565b6000620000428282620001c4565b505062000290565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b600086848301015280965050505050505092915050565b600181811c908216806200014a57607f821691505b6020821081036200016b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bf57600081815260208120601f850160051c810160208610156200019a5750805b601f850160051c820191505b81811015620001bb57828155600101620001a6565b5050505b505050565b81516001600160401b03811115620001e057620001e06200004a565b620001f881620001f1845462000135565b8462000171565b602080601f831160018114620002305760008415620002175750858301515b600019600386901b1c1916600185901b178555620001bb565b600085815260208120601f198616915b82811015620002615788860151825594840194600190910190840162000240565b5085821015620002805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61246780620002a06000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c80632af9cc41146100725780633c9a9f4a14610087578063423a415b146100c85780635fa3b263146100e857806384eaeeda146100fa578063a59f3e0c1461010d578063c623674f14610120575b600080fd5b610085610080366004611b92565b610135565b005b6100b0610095366004611e23565b50506040805160208101909152600080825293849350909150565b6040516100bf93929190611efc565b60405180910390f35b6100db6100d6366004611f44565b610408565b6040516100bf9190611fe2565b6100856100f6366004612069565b5050565b6100db610108366004612099565b61077f565b61008561011b366004612105565b6109a4565b610128610eb2565b6040516100bf919061211e565b600061014083610f40565b806020019051810190610153919061215e565b905061015e81611006565b60006127108383606001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016101949190612219565b602060405180830381865afa1580156101b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d5919061222d565b6101df919061225c565b6101e99190612273565b905060008260e00151600281111561020357610203611ea0565b036102ab5761022e82604001518284606001516001600160a01b03166112f79092919063ffffffff16565b60608201516080830151604051630d2680e960e11b815260048101849052600f9190910b6024820152600060448201526001600160a01b0390911690631a4d01d2906064015b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b50505050610402565b60018260e0015160028111156102c3576102c3611ea0565b036103535760c08201516001600160a01b03161561033a576103018260c001518284606001516001600160a01b03166112f79092919063ffffffff16565b8160c001516001600160a01b031663f1dc3cc9828460a0015160006040518463ffffffff1660e01b815260040161027493929190612295565b6040516349f16da160e11b815260040160405180910390fd5b60028260e00151600281111561036b5761036b611ea0565b036104025761039682604001518284606001516001600160a01b03166112f79092919063ffffffff16565b81604001516001600160a01b031663f1dc3cc9828460a0015160006040518463ffffffff1660e01b81526004016103cf93929190612295565b600060405180830381600087803b1580156103e957600080fd5b505af11580156103fd573d6000803e3d6000fd5b505050505b50505050565b610410611b2c565b600082806020019051810190610426919061215e565b905061043181611006565b60208101518490600090610446908390611381565b9050600061271084600001518361045d919061225c565b6104679190612273565b905060008460e00151600281111561048157610481611ea0565b0361060357600084604001516001600160a01b031663293577506040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ee919061222d565b90506000816001600160401b0381111561050a5761050a611bc1565b604051908082528060200260200182016040528015610533578160200160208202803683370190505b50905082818760a001518151811061054d5761054d6122ab565b602002602001018181525050600086604001516001600160a01b0316633db06dd88360016040518363ffffffff1660e01b815260040161058e9291906122c1565b602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf919061222d565b60608801519091506105e390879083611652565b60208701516105f490879086611921565b85975050505050505050610779565b60018460e00151600281111561061b5761061b611ea0565b036106fe5760c08401516001600160a01b03161561033a5761063b611b56565b81818660a0015160048110610652576106526122ab565b602002015260c0850151604051631a80518560e01b81526000916001600160a01b031690631a8051859061068a908590600401612308565b602060405180830381865afa1580156106a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cb919061222d565b60608701519091506106df90869083611652565b60208601516106f090869085611921565b849650505050505050610779565b60028460e00151600281111561071657610716611ea0565b0361077257610723611b74565b81818660a001516002811061073a5761073a6122ab565b60200201526040808601519051638d8ea72760e01b81526000916001600160a01b031690638d8ea7279061068a908590600401612339565b5090925050505b92915050565b610787611b2c565b60008380602001905181019061079d919061215e565b9050846107a982611006565b60006107c283606001518361138190919063ffffffff16565b905060006127106107d3878461225c565b6107dd9190612273565b9050806000036107f3578294505050505061099d565b60008460e00151600281111561080b5761080b611ea0565b036108c757600084604001516001600160a01b031663cc2b27d78387608001516040518363ffffffff1660e01b8152600401610854929190918252600f0b602082015260400190565b602060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610895919061222d565b60608601519091506108a990859084611921565b60208501516108ba90859083611652565b839550505050505061099d565b60018460e0015160028111156108df576108df611ea0565b036109385760c08401516001600160a01b03161561033a5760c084015160a08501516040516327d8462f60e11b81526000926001600160a01b031691634fb08c5e91610854918691600401918252602082015260400190565b60028460e00151600281111561095057610950611ea0565b0361099657600084604001516001600160a01b0316634fb08c5e838760a001516040518363ffffffff1660e01b8152600401610854929190918252602082015260400190565b5090925050505b9392505050565b60006109af82610f40565b8060200190518101906109c2919061215e565b90506109cd81611006565b6000612710826000015183602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a079190612219565b602060405180830381865afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a48919061222d565b610a52919061225c565b610a5c9190612273565b9050600082606001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a909190612219565b602060405180830381865afa158015610aad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad1919061222d565b905060008360e001516002811115610aeb57610aeb611ea0565b03610c5557610b1683604001518385602001516001600160a01b03166112f79092919063ffffffff16565b600083604001516001600160a01b031663293577506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e919061222d565b90506000816001600160401b03811115610b9a57610b9a611bc1565b604051908082528060200260200182016040528015610bc3578160200160208202803683370190505b50905083818660a0015181518110610bdd57610bdd6122ab565b60200260200101818152505084604001516001600160a01b031663b72df5de8260006040518363ffffffff1660e01b8152600401610c1c929190612347565b600060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b505050505050610e0b565b60018360e001516002811115610c6d57610c6d611ea0565b03610d3b5760c08301516001600160a01b03161561033a57610cab8360c001518385602001516001600160a01b03166112f79092919063ffffffff16565b610cb3611b56565b82818560a0015160048110610cca57610cca6122ab565b602002015260c084015160405162a6cbcd60e21b81526001600160a01b039091169063029b2f3490610d03908490600090600401612369565b600060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b5050505050610e0b565b60028360e001516002811115610d5357610d53611ea0565b03610e0b57610d7e83604001518385602001516001600160a01b03166112f79092919063ffffffff16565b610d86611b74565b82818560a0015160028110610d9d57610d9d6122ab565b60200201526040808501519051630b4c7e4d60e01b81526001600160a01b0390911690630b4c7e4d90610dd7908490600090600401612384565b600060405180830381600087803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050505b60608301516040516370a0823160e01b81526000916001600160a01b0316906370a0823190610e3e903090600401612219565b602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f919061222d565b9050610e8b828261239f565b600003610eab57604051636f6cee4360e11b815260040160405180910390fd5b5050505050565b60008054610ebf906123b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610eeb906123b2565b8015610f385780601f10610f0d57610100808354040283529160200191610f38565b820191906000526020600020905b815481529060010190602001808311610f1b57829003601f168201915b505050505081565b60008181527f6cdfc6ca446270f57c242b4ffaec9038c830d41e17b27b49092a97ea55e3e3d56020819052604090912080546060929190610f80906123b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610fac906123b2565b8015610ff95780601f10610fce57610100808354040283529160200191610ff9565b820191906000526020600020905b815481529060010190602001808311610fdc57829003601f168201915b5050505050915050919050565b60008160e00151600281111561101e5761101e611ea0565b036111b557600081604001516001600160a01b031663687276538360a0015160001461105a5760018460a00151611055919061239f565b61105d565b60005b6040518263ffffffff1660e01b815260040161107b91815260200190565b602060405180830381865afa158015611098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bc919061222d565b9050600082604001516001600160a01b031663ec0238628460a001516000146110f55760018560a001516110f0919061239f565b6110f8565b60005b6040518263ffffffff1660e01b815260040161111691815260200190565b602060405180830381865afa158015611133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611157919061222d565b9050606461116683606561225c565b6111709190612273565b8111806111925750606461118583606361225c565b61118f9190612273565b81105b156111b0576040516348fa9b2b60e11b815260040160405180910390fd5b505050565b60028160e0015160028111156111cd576111cd611ea0565b0361128057600081604001516001600160a01b03166386fc88d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a919061222d565b9050600082604001516001600160a01b031663c146bf946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611133573d6000803e3d6000fd5b60018160e00151600281111561129857611298611ea0565b036112f45760c08101516001600160a01b03161561033a57600081604001516001600160a01b03166386fc88d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611216573d6000803e3d6000fd5b50565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b919061222d565b9050610402848461137c85856123ec565b6119a8565b60008080805b85602001515181101561140157846001600160a01b0316866020015182815181106113b4576113b46122ab565b60200260200101516001600160a01b0316036113ef5760019250856040015181815181106113e4576113e46122ab565b602002602001015191505b806113f9816123ff565b915050611387565b508015801561140e575081155b1561164a5784516040516370a0823160e01b81526001600160a01b038616916370a08231916114409190600401612219565b602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611481919061222d565b90506000856020015151600161149791906123ec565b6001600160401b038111156114ae576114ae611bc1565b6040519080825280602002602001820160405280156114d7578160200160208202803683370190505b509050600086602001515160016114ee91906123ec565b6001600160401b0381111561150557611505611bc1565b60405190808252806020026020018201604052801561152e578160200160208202803683370190505b50905060005b8760200151518110156115de5787602001518181518110611557576115576122ab565b6020026020010151838281518110611571576115716122ab565b60200260200101906001600160a01b031690816001600160a01b031681525050876040015181815181106115a7576115a76122ab565b60200260200101518282815181106115c1576115c16122ab565b6020908102919091010152806115d6816123ff565b915050611534565b508582886020015151815181106115f7576115f76122ab565b60200260200101906001600160a01b031690816001600160a01b03168152505082818860200151518151811061162f5761162f6122ab565b60209081029190910181019190915287019190915260408601525b949350505050565b60005b8360200151518110156116de57826001600160a01b031684602001518281518110611682576116826122ab565b60200260200101516001600160a01b0316036116cc5781846040015182815181106116af576116af6122ab565b602002602001018181516116c391906123ec565b90525050505050565b806116d6816123ff565b915050611655565b50600083602001515160016116f391906123ec565b6001600160401b0381111561170a5761170a611bc1565b604051908082528060200260200182016040528015611733578160200160208202803683370190505b5090506000846020015151600161174a91906123ec565b6001600160401b0381111561176157611761611bc1565b60405190808252806020026020018201604052801561178a578160200160208202803683370190505b50905060005b85602001515181101561183a57856020015181815181106117b3576117b36122ab565b60200260200101518382815181106117cd576117cd6122ab565b60200260200101906001600160a01b031690816001600160a01b03168152505085604001518181518110611803576118036122ab565b602002602001015182828151811061181d5761181d6122ab565b602090810291909101015280611832816123ff565b915050611790565b5084516040516370a0823160e01b81526000916001600160a01b038716916370a082319161186a91600401612219565b602060405180830381865afa158015611887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ab919061222d565b90508483876020015151815181106118c5576118c56122ab565b6001600160a01b03909216602092830291909101909101526118e784826123ec565b82876020015151815181106118fe576118fe6122ab565b602090810291909101810191909152860192909252604090940193909352505050565b60005b83602001515181101561040257826001600160a01b031684602001518281518110611951576119516122ab565b60200260200101516001600160a01b03160361199657818460400151828151811061197e5761197e6122ab565b60200260200101818151611992919061239f565b9052505b806119a0816123ff565b915050611924565b6000836001600160a01b031663095ea7b384846040516024016119cc929190612418565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509050611a058482611a6c565b61040257611a6284856001600160a01b031663095ea7b3866000604051602401611a30929190612418565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611abb565b6104028482611abb565b6000806000806020600086516020880160008a5af192503d91506000519050828015611ab157508115611aa25780600114611ab1565b6000866001600160a01b03163b115b9695505050505050565b600080602060008451602086016000885af180611ade576040513d6000823e3d81fd5b50506000513d91508115611af6578060011415611b03565b6001600160a01b0384163b155b156104025783604051635274afe760e01b8152600401611b239190612219565b60405180910390fd5b604051806060016040528060006001600160a01b0316815260200160608152602001606081525090565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60008060408385031215611ba557600080fd5b50508035926020909101359150565b600381106112f457600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715611bf957611bf9611bc1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611c2757611c27611bc1565b604052919050565b600082601f830112611c4057600080fd5b81356001600160401b03811115611c5957611c59611bc1565b611c6c601f8201601f1916602001611bff565b818152846020838601011115611c8157600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b03811681146112f457600080fd5b60006001600160401b03821115611ccc57611ccc611bc1565b5060051b60200190565b600082601f830112611ce757600080fd5b81356020611cfc611cf783611cb3565b611bff565b82815260059290921b84018101918181019086841115611d1b57600080fd5b8286015b84811015611d365780358352918301918301611d1f565b509695505050505050565b600060608284031215611d5357600080fd5b611d5b611bd7565b90508135611d6881611c9e565b81526020828101356001600160401b0380821115611d8557600080fd5b818501915085601f830112611d9957600080fd5b8135611da7611cf782611cb3565b81815260059190911b83018401908481019088831115611dc657600080fd5b938501935b82851015611ded578435611dde81611c9e565b82529385019390850190611dcb565b80868801525050506040850135925080831115611e0957600080fd5b5050611e1784828501611cd6565b60408301525092915050565b60008060008060808587031215611e3957600080fd5b8435611e4481611bb4565b935060208501356001600160401b0380821115611e6057600080fd5b611e6c88838901611c2f565b94506040870135915080821115611e8257600080fd5b50611e8f87828801611d41565b949793965093946060013593505050565b634e487b7160e01b600052602160045260246000fd5b6000815180845260005b81811015611edc57602081850181015186830182015201611ec0565b506000602082860101526020601f19601f83011685010191505092915050565b8315158152600060048410611f2157634e487b7160e01b600052602160045260246000fd5b83602083015260606040830152611f3b6060830184611eb6565b95945050505050565b60008060408385031215611f5757600080fd5b82356001600160401b0380821115611f6e57600080fd5b611f7a86838701611d41565b93506020850135915080821115611f9057600080fd5b50611f9d85828601611c2f565b9150509250929050565b600081518084526020808501945080840160005b83811015611fd757815187529582019590820190600101611fbb565b509495945050505050565b602080825282516001600160a01b03908116838301528382015160606040850152805160808501819052600093929183019190849060a08701905b8083101561203f5784518416825293850193600192909201919085019061201d565b506040880151878203601f19016060890152945061205d8186611fa7565b98975050505050505050565b6000806040838503121561207c57600080fd5b82359150602083013561208e81611bb4565b809150509250929050565b6000806000606084860312156120ae57600080fd5b83356001600160401b03808211156120c557600080fd5b6120d187838801611d41565b945060208601359150808211156120e757600080fd5b506120f486828701611c2f565b925050604084013590509250925092565b60006020828403121561211757600080fd5b5035919050565b60208152600061099d6020830184611eb6565b805161213c81611c9e565b919050565b8051600f81900b811461213c57600080fd5b805161213c81611bb4565b600061010080838503121561217257600080fd5b604051908101906001600160401b038211818310171561219457612194611bc1565b8160405283518152602084015191506121ac82611c9e565b8160208201526121be60408501612131565b60408201526121cf60608501612131565b60608201526121e060808501612141565b608082015260a084015160a08201526121fb60c08501612131565b60c082015261220c60e08501612153565b60e0820152949350505050565b6001600160a01b0391909116815260200190565b60006020828403121561223f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761077957610779612246565b60008261229057634e487b7160e01b600052601260045260246000fd5b500490565b9283526020830191909152604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6040815260006122d46040830185611fa7565b905082151560208301529392505050565b8060005b60048110156104025781518452602093840193909101906001016122e9565b6080810161077982846122e5565b8060005b600281101561040257815184526020938401939091019060010161231a565b604081016107798284612316565b60408152600061235a6040830185611fa7565b90508260208301529392505050565b60a0810161237782856122e5565b8260808301529392505050565b606081016123928285612316565b8260408301529392505050565b8181038181111561077957610779612246565b600181811c908216806123c657607f821691505b6020821081036123e657634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561077957610779612246565b60006001820161241157612411612246565b5060010190565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220c5b3e85405450333bc0ad61bce9ff15fec34db5ab2030cec3e4f0a6b4cfd39ff64736f6c634300081400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e516d5273766e6251755a6f6433654b55676b4b3172645437586a5a3570427856475651756134686f4d5069624165000000000000000000000000000000000000