0x60a060405234801561001057600080fd5b503060405161001e90610060565b6001600160a01b039091168152602001604051809103906000f08015801561004a573d6000803e3d6000fd5b5060601b6001600160601b03191660805261006d565b6104d780611d9f83390190565b60805160601c611ceb6100b46000396000818160a6015281816102780152818161042401528181610584015281816108b901528181610c00015261123d0152611ceb6000f3fe60806040526004361061005a5760003560e01c8063c394a5da11610043578063c394a5da14610094578063e1edd61c146100e4578063f5b697a51461010457600080fd5b8063732cffe91461005f578063a11b119814610081575b600080fd5b34801561006b57600080fd5b5061007f61007a3660046117f6565b610124565b005b61007f61008f366004611a69565b6103f3565b3480156100a057600080fd5b506100c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b3480156100f057600080fd5b5061007f6100ff366004611a2d565b610da8565b34801561011057600080fd5b5061007f61011f3660046118b7565b611189565b60008061016c8b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611237915050565b91509150816101b95761019781604051806060016040528060228152602001611c726022913961139d565b60405162461bcd60e51b81526004016101b09190611aea565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a082319060240160206040518083038186803b1580156101fb57600080fd5b505afa15801561020f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102339190611aa5565b9050600085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690881614156102f35760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f7574657256323a20696e76616c696420726563697069656e740060448201526064016101b0565b863b87816103575760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b60648201526084016101b0565b5050600080886001600160a01b0316836040516103749190611ace565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b5091509150816103e25761019781604051806060016040528060318152602001611c416031913961139d565b505050505050505050505050505050565b60006104026040830183611b1d565b9150610416905060e0830160c0840161193f565b610500576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639fc314c86104566040850185611b1d565b600081811061046757610467611c03565b905060200201602081019061047c91906117db565b336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260a08501356044820152606401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b60a082013561050f8380611b67565b1590506107f95761052660e0840160c0850161193f565b61057a5761057a61053a6040850185611b1d565b600081811061054b5761054b611c03565b905060200201602081019061056091906117db565b61057060808601606087016117db565b8560a001356113d3565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166105b460808501606086016117db565b6001600160a01b0316141561060b5760405162461bcd60e51b815260206004820181905260248201527f4d657461526f757465723a20696e76616c696420666972737420726f7574657260448201526064016101b0565b60008061061e60808601606087016117db565b803b92509050816106855760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b60648201526084016101b0565b50600090508061069b60808601606087016117db565b6001600160a01b0316346106af8780611b67565b6040516106bd929190611abe565b60006040518083038185875af1925050503d80600081146106fa576040519150601f19603f3d011682016040523d82523d6000602084013e6106ff565b606091505b50915091508161074857610197816040518060400160405280601d81526020017f4d657461526f757465723a2066697273742073776170206661696c656400000081525061139d565b6107556040860186611b1d565b600181811061076657610766611c03565b905060200201602081019061077b91906117db565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b1580156107bc57600080fd5b505afa1580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f49190611aa5565b925050505b806108076020850185611b67565b159050610b5357600061081d6020860186611b67565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506024810184905290506108af61086a6040870187611b1d565b610875600288611bae565b81811061088457610884611c03565b905060200201602081019061089991906117db565b6108a960a08801608089016117db565b856113d3565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166108e960a08701608088016117db565b6001600160a01b031614156109665760405162461bcd60e51b815260206004820152602160248201527f4d657461526f757465723a20696e76616c6964207365636f6e6420726f75746560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016101b0565b60008061097960a08801608089016117db565b803b92509050816109e05760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b60648201526084016101b0565b5060009050806109f660a08801608089016117db565b6001600160a01b031683604051610a0d9190611ace565b6000604051808303816000865af19150503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b509150915081610a9857610197816040518060400160405280601e81526020017f4d657461526f757465723a207365636f6e642073776170206661696c6564000081525061139d565b610aa56040880188611b1d565b610ab0600189611bae565b818110610abf57610abf611c03565b9050602002016020810190610ad491906117db565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610b1557600080fd5b505afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d9190611aa5565b93505050505b610ba9610b636040860186611b1d565b610b6e600187611bae565b818110610b7d57610b7d611c03565b9050602002016020810190610b9291906117db565b610ba3610100870160e088016117db565b836113d3565b6000610bb9610100860186611b67565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610c31610100870160e088016117db565b6001600160a01b03161415610c885760405162461bcd60e51b815260206004820152601d60248201527f4d657461526f757465723a20696e76616c696420726563697069656e7400000060448201526064016101b0565b600080610c9c610100880160e089016117db565b803b9250905081610d035760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b60648201526084016101b0565b506000905080610d1a610100880160e089016117db565b6001600160a01b031683604051610d319190611ace565b6000604051808303816000865af19150503d8060008114610d6e576040519150601f19603f3d011682016040523d82523d6000602084013e610d73565b606091505b509150915081610d9f5761019781604051806060016040528060228152602001611c946022913961139d565b50505050505050565b6000610db760c0830183611b1d565b6000818110610dc857610dc8611c03565b9050602002016020810190610ddd91906117db565b9050610ded610100830183611b67565b159050610f0e57600080610e8e610e0760c0860186611b1d565b6000818110610e1857610e18611c03565b9050602002016020810190610e2d91906117db565b6020860135610e43610100880160e089016117db565b610e51610100890189611b67565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611237915050565b9150915081610ed657610197816040518060400160405280602081526020017f4d657461526f757465723a20696e7465726e616c2073776170206661696c656481525061139d565b610ee360c0850185611b1d565b6001818110610ef457610ef4611c03565b9050602002016020810190610f0991906117db565b925050505b610f1c610140830183611b67565b159050611052576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610f6557600080fd5b505afa158015610f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9d9190611aa5565b90506000806110068484610fb961014089016101208a016117db565b610fc76101408a018a611b67565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101608a0135611237565b915091508161104e57610197816040518060400160405280601d81526020017f4d657461526f757465723a2066696e616c2063616c6c206661696c656400000081525061139d565b5050505b600061106160c0840184611b1d565b600161107060c0870187611b1d565b61107b929150611bae565b81811061108a5761108a611c03565b905060200201602081019061109f91906117db565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190611aa5565b905080156111845761118461113060c0850185611b1d565b600161113f60c0880188611b1d565b61114a929150611bae565b81811061115957611159611c03565b905060200201602081019061116e91906117db565b61117e60c0860160a087016117db565b8361149f565b505050565b60006111cf88888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611237915050565b5090508061122d576111e288838961149f565b604080516001600160a01b038481168252602082018a90528a168183015290517f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f9181900360600190a15b5050505050505050565b600060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614156112bd5760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f757465723a20696e76616c69642072656365697665536964650060448201526064016101b0565b6112c88786886113d3565b838301869052843b85816113325760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b60648201526084016101b0565b5050846001600160a01b03168460405161134c9190611ace565b6000604051808303816000865af19150503d8060008114611389576040519150601f19603f3d011682016040523d82523d6000602084013e61138e565b606091505b50909890975095505050505050565b60606044835110156113b05750806113cd565b600483019250828060200190518101906113ca9190611980565b90505b92915050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015282919085169063dd62ed3e9060440160206040518083038186803b15801561143657600080fd5b505afa15801561144a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146e9190611aa5565b10156111845761118483837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61160e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916115299190611ace565b6000604051808303816000865af19150503d8060008114611566576040519150601f19603f3d011682016040523d82523d6000602084013e61156b565b606091505b50915091508180156115955750805115806115955750808060200190518101906115959190611963565b6116075760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c65640000000000000000000000000000000000000060648201526084016101b0565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291516000928392908716916116989190611ace565b6000604051808303816000865af19150503d80600081146116d5576040519150601f19603f3d011682016040523d82523d6000602084013e6116da565b606091505b50915091508180156117045750805115806117045750808060200190518101906117049190611963565b6116075760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201527f726f7665206661696c656400000000000000000000000000000000000000000060648201526084016101b0565b80356001600160a01b038116811461178d57600080fd5b919050565b60008083601f8401126117a457600080fd5b50813567ffffffffffffffff8111156117bc57600080fd5b6020830191508360208285010111156117d457600080fd5b9250929050565b6000602082840312156117ed57600080fd5b6113ca82611776565b600080600080600080600080600060e08a8c03121561181457600080fd5b61181d8a611776565b985060208a0135975061183260408b01611776565b965060608a013567ffffffffffffffff8082111561184f57600080fd5b61185b8d838e01611792565b909850965086915061186f60808d01611776565b955061187d60a08d01611776565b945060c08c013591508082111561189357600080fd5b506118a08c828d01611792565b915080935050809150509295985092959850929598565b600080600080600080600060c0888a0312156118d257600080fd5b6118db88611776565b9650602088013595506118f060408901611776565b9450606088013567ffffffffffffffff81111561190c57600080fd5b6119188a828b01611792565b9095509350506080880135915061193160a08901611776565b905092959891949750929550565b60006020828403121561195157600080fd5b813561195c81611c2f565b9392505050565b60006020828403121561197557600080fd5b815161195c81611c2f565b60006020828403121561199257600080fd5b815167ffffffffffffffff808211156119aa57600080fd5b818401915084601f8301126119be57600080fd5b8151818111156119d0576119d0611c19565b604051601f8201601f19908116603f011681019083821181831017156119f8576119f8611c19565b81604052828152876020848701011115611a1157600080fd5b611a22836020830160208801611bd3565b979650505050505050565b600060208284031215611a3f57600080fd5b813567ffffffffffffffff811115611a5657600080fd5b8201610180818503121561195c57600080fd5b600060208284031215611a7b57600080fd5b813567ffffffffffffffff811115611a9257600080fd5b8201610120818503121561195c57600080fd5b600060208284031215611ab757600080fd5b5051919050565b8183823760009101908152919050565b60008251611ae0818460208701611bd3565b9190910192915050565b6020815260008251806020840152611b09816040850160208701611bd3565b601f01601f19169190910160400192915050565b6000808335601e19843603018112611b3457600080fd5b83018035915067ffffffffffffffff821115611b4f57600080fd5b6020019150600581901b36038213156117d457600080fd5b6000808335601e19843603018112611b7e57600080fd5b83018035915067ffffffffffffffff821115611b9957600080fd5b6020019150368190038213156117d457600080fd5b600082821015611bce57634e487b7160e01b600052601160045260246000fd5b500390565b60005b83811015611bee578181015183820152602001611bd6565b83811115611bfd576000848401525b50505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114611c3d57600080fd5b5056fe4d657461526f7574657256323a2072657665727453796e74686573697a65526571756573742063616c6c206661696c65644d657461526f7574657256323a20696e7465726e616c2073776170206661696c65644d657461526f757465723a206f7468657220736964652063616c6c206661696c6564a26469706673582212208aecff9e217ea50d81ced7651b899d1f6e032e46df91962a72f1b0c25effb6e564736f6c6343000807003360a060405234801561001057600080fd5b506040516104d73803806104d783398101604081905261002f91610044565b60601b6001600160601b031916608052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160601c61043961009e6000396000818160550152818160a2015261017101526104396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80639fc314c81461003b578063dbec15bb14610050575b600080fd5b61004e610049366004610363565b6100a0565b005b6100777f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461016a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53796d623a2063616c6c6572206973206e6f7420746865206d657461726f757460448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61019683837f00000000000000000000000000000000000000000000000000000000000000008461019b565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052915160009283929088169161023a91906103c8565b6000604051808303816000865af19150503d8060008114610277576040519150601f19603f3d011682016040523d82523d6000602084013e61027c565b606091505b50915091508180156102a65750805115806102a65750808060200190518101906102a6919061039f565b610332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260448201527f616e7366657246726f6d206661696c65640000000000000000000000000000006064820152608401610161565b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461035e57600080fd5b919050565b60008060006060848603121561037857600080fd5b6103818461033a565b925061038f6020850161033a565b9150604084013590509250925092565b6000602082840312156103b157600080fd5b815180151581146103c157600080fd5b9392505050565b6000825160005b818110156103e957602081860181015185830152016103cf565b818111156103f8576000828501525b50919091019291505056fea26469706673582212202568575dd38d51c811ca9abb487d12cf7f92601b834f2b8dba043bc452c3f35164736f6c63430008070033