60a060405234801561000f575f80fd5b506040516120bc3803806120bc83398101604081905261002e91610122565b81815f61003b8382610228565b5060016100488282610228565b5050506001600160a01b0383166100725760405163d92e233d60e01b815260040160405180910390fd5b50506001600160a01b03166080526102e2565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126100a8575f80fd5b81516001600160401b038111156100c1576100c1610085565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100ef576100ef610085565b604052818152838201602001851015610106575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f60608486031215610134575f80fd5b83516001600160a01b038116811461014a575f80fd5b60208501519093506001600160401b03811115610165575f80fd5b61017186828701610099565b604086015190935090506001600160401b0381111561018e575f80fd5b61019a86828701610099565b9150509250925092565b600181811c908216806101b857607f821691505b6020821081036101d657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022357805f5260205f20601f840160051c810160208510156102015750805b601f840160051c820191505b81811015610220575f815560010161020d565b50505b505050565b81516001600160401b0381111561024157610241610085565b6102558161024f84546101a4565b846101dc565b6020601f821160018114610287575f83156102705750848201515b5f19600385901b1c1916600184901b178455610220565b5f84815260208120601f198516915b828110156102b65787850151825560209485019460019092019101610296565b50848210156102d357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608051611d9f61031d5f395f8181610266015281816106d9015281816107c6015281816108ab0152818161098f0152610a390152611d9f5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c80638da5cb5b1161009e578063bc197c811161006e578063bc197c8114610235578063c0b7da7a14610261578063c87b56dd14610288578063e985e9c51461029b578063f23a6e61146102ae575f80fd5b80638da5cb5b146101ff57806395d89b4114610207578063a22cb4651461020f578063b88d4fde14610222575f80fd5b806323b872dd116100e457806323b872dd1461019257806342842e0e146101a55780636352211e146101b857806363ac2a4c146101cb57806370a08231146101de575f80fd5b806301ffc9a71461011557806306fdde031461013d578063081812fc14610152578063095ea7b31461017d575b5f80fd5b610128610123366004611613565b6102c1565b60405190151581526020015b60405180910390f35b6101456102d1565b604051610134919061165c565b61016561016036600461166e565b610360565b6040516001600160a01b039091168152602001610134565b61019061018b366004611699565b6103f8565b005b6101906101a03660046116c3565b61050c565b6101906101b33660046116c3565b61053d565b6101656101c636600461166e565b610557565b6101906101d9366004611748565b6105cd565b6101f16101ec366004611786565b61073e565b604051908152602001610134565b6101656107c3565b610145610849565b61019061021d3660046117a1565b610858565b610190610230366004611846565b610867565b61024861024336600461192a565b61089f565b6040516001600160e01b03199091168152602001610134565b6101657f000000000000000000000000000000000000000000000000000000000000000081565b61014561029636600461166e565b61096a565b6101286102a93660046119ea565b610a00565b6102486102bc366004611a16565b610a2d565b5f6102cb82610ab3565b92915050565b60605f80546102df90611a8c565b80601f016020809104026020016040519081016040528092919081815260200182805461030b90611a8c565b80156103565780601f1061032d57610100808354040283529160200191610356565b820191905f5260205f20905b81548152906001019060200180831161033957829003601f168201915b5050505050905090565b5f818152600260205260408120546001600160a01b03166103dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600460205260409020546001600160a01b031690565b5f61040282610557565b9050806001600160a01b0316836001600160a01b03160361046f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103d4565b336001600160a01b038216148061048b575061048b8133610a00565b6104fd5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103d4565b6105078383610af2565b505050565b6105163382610b5f565b6105325760405162461bcd60e51b81526004016103d490611ac4565b610507838383610c34565b61050783838360405180602001604052805f815250610867565b5f818152600260205260408120546001600160a01b0316806102cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016103d4565b5f5b81811015610507575f8383838181106105ea576105ea611b15565b9050602002013590506105fd3382610b5f565b6106845760405162461bcd60e51b815260206004820152604c60248201527f4552433131353544656c7461496e4552433732313a206d73672e73656e64657260448201527f206e6f742074686520746f6b656e206f776e6572206f7220616e20617070726f60648201526b3b32b21037b832b930ba37b960a11b608482015260a4016103d4565b5f61068e82610557565b905061069982610dd0565b604051637921219560e11b81523060048201526001600160a01b038281166024830152604482018490526001606483015260a060848301525f60a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f242432a9060c4015f604051808303815f87803b15801561071a575f80fd5b505af115801561072c573d5f803e3d5ffd5b5050600190940193506105cf92505050565b5f6001600160a01b0382166107a85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103d4565b506001600160a01b03165f9081526003602052604090205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610820573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108449190611b29565b905090565b6060600180546102df90611a8c565b610863338383610e67565b5050565b6108713383610b5f565b61088d5760405162461bcd60e51b81526004016103d490611ac4565b61089984848484610f34565b50505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108e85760405162461bcd60e51b81526004016103d490611b44565b5f5b868110156109545785858281811061090457610904611b15565b9050602002013560011461092a5760405162461bcd60e51b81526004016103d490611ba1565b61094c8989898481811061094057610940611b15565b90506020020135610f67565b6001016108ea565b5063bc197c8160e01b9998505050505050505050565b6040516303a24d0760e21b8152600481018290526060906102cb906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630e89341c906024015f60405180830381865afa1580156109d3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109fa9190810190611be6565b83610f80565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a765760405162461bcd60e51b81526004016103d490611b44565b83600114610a965760405162461bcd60e51b81526004016103d490611ba1565b610aa08686610f67565b5063f23a6e6160e01b9695505050505050565b5f6001600160e01b031982166380ac58cd60e01b1480610ae357506001600160e01b03198216635b5e139f60e01b145b806102cb57506102cb826111bd565b5f81815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610b2682610557565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f818152600260205260408120546001600160a01b0316610bd75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103d4565b5f610be183610557565b9050806001600160a01b0316846001600160a01b03161480610c1c5750836001600160a01b0316610c1184610360565b6001600160a01b0316145b80610c2c5750610c2c8185610a00565b949350505050565b826001600160a01b0316610c4782610557565b6001600160a01b031614610caf5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103d4565b6001600160a01b038216610d115760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103d4565b610d1b5f82610af2565b6001600160a01b0383165f908152600360205260408120805460019290610d43908490611c6e565b90915550506001600160a01b0382165f908152600360205260408120805460019290610d70908490611c81565b90915550505f8181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f610dda82610557565b9050610de65f83610af2565b6001600160a01b0381165f908152600360205260408120805460019290610e0e908490611c6e565b90915550505f8281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603610ec85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103d4565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610f3f848484610c34565b610f4b848484846111f1565b6108995760405162461bcd60e51b81526004016103d490611c94565b610863828260405180602001604052805f8152506112ee565b6060825f80805b600384510381101561106857838181518110610fa557610fa5611b15565b01602001516001600160f81b031916607b60f81b0361106057838160010181518110610fd357610fd3611b15565b6020910101516001600160f81b031916606960f81b14801561101c575083816002018151811061100557611005611b15565b6020910101516001600160f81b031916601960fa1b145b801561104f575083816003018151811061103857611038611b15565b6020910101516001600160f81b031916607d60f81b145b156110605780915060019250611068565b600101610f87565b5081156111b2575f8351603c61107e9190611c81565b90505f816001600160401b03811115611099576110996117dc565b6040519080825280601f01601f1916602001820160405280156110c3576020820181803683370190505b5090505f6110d2886020611320565b90505f5b838110156111a35784811015611130578681815181106110f8576110f8611b15565b602001015160f81c60f81b83828151811061111557611115611b15565b60200101906001600160f81b03191690815f1a90535061119b565b846040018110156111525781858203600201815181106110f8576110f8611b15565b86603c82038151811061116757611167611b15565b602001015160f81c60f81b83828151811061118457611184611b15565b60200101906001600160f81b03191690815f1a9053505b6001016110d6565b508196505050505050506102cb565b8293505050506102cb565b5f6001600160e01b03198216630271189760e51b14806102cb57506301ffc9a760e01b6001600160e01b03198316146102cb565b5f6001600160a01b0384163b156112e357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611234903390899088908890600401611ce6565b6020604051808303815f875af192505050801561126e575060408051601f3d908101601f1916820190925261126b91810190611d22565b60015b6112c9573d80801561129b576040519150601f19603f3d011682016040523d82523d5f602084013e6112a0565b606091505b5080515f036112c15760405162461bcd60e51b81526004016103d490611c94565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c2c565b506001949350505050565b6112f883836114bc565b6113045f8484846111f1565b6105075760405162461bcd60e51b81526004016103d490611c94565b60605f61132e836002611d3d565b611339906002611c81565b6001600160401b03811115611350576113506117dc565b6040519080825280601f01601f19166020018201604052801561137a576020820181803683370190505b509050600360fc1b815f8151811061139457611394611b15565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106113c2576113c2611b15565b60200101906001600160f81b03191690815f1a9053505f6113e4846002611d3d565b6113ef906001611c81565b90505b6001811115611466576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061142357611423611b15565b1a60f81b82828151811061143957611439611b15565b60200101906001600160f81b03191690815f1a90535060049490941c9361145f81611d54565b90506113f2565b5083156114b55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103d4565b9392505050565b6001600160a01b0382166115125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103d4565b5f818152600260205260409020546001600160a01b0316156115765760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103d4565b6001600160a01b0382165f90815260036020526040812080546001929061159e908490611c81565b90915550505f8181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114611610575f80fd5b50565b5f60208284031215611623575f80fd5b81356114b5816115fb565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6114b5602083018461162e565b5f6020828403121561167e575f80fd5b5035919050565b6001600160a01b0381168114611610575f80fd5b5f80604083850312156116aa575f80fd5b82356116b581611685565b946020939093013593505050565b5f805f606084860312156116d5575f80fd5b83356116e081611685565b925060208401356116f081611685565b929592945050506040919091013590565b5f8083601f840112611711575f80fd5b5081356001600160401b03811115611727575f80fd5b6020830191508360208260051b8501011115611741575f80fd5b9250929050565b5f8060208385031215611759575f80fd5b82356001600160401b0381111561176e575f80fd5b61177a85828601611701565b90969095509350505050565b5f60208284031215611796575f80fd5b81356114b581611685565b5f80604083850312156117b2575f80fd5b82356117bd81611685565b9150602083013580151581146117d1575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611818576118186117dc565b604052919050565b5f6001600160401b03821115611838576118386117dc565b50601f01601f191660200190565b5f805f8060808587031215611859575f80fd5b843561186481611685565b9350602085013561187481611685565b92506040850135915060608501356001600160401b03811115611895575f80fd5b8501601f810187136118a5575f80fd5b80356118b86118b382611820565b6117f0565b8181528860208385010111156118cc575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f8083601f8401126118fd575f80fd5b5081356001600160401b03811115611913575f80fd5b602083019150836020828501011115611741575f80fd5b5f805f805f805f8060a0898b031215611941575f80fd5b883561194c81611685565b9750602089013561195c81611685565b965060408901356001600160401b03811115611976575f80fd5b6119828b828c01611701565b90975095505060608901356001600160401b038111156119a0575f80fd5b6119ac8b828c01611701565b90955093505060808901356001600160401b038111156119ca575f80fd5b6119d68b828c016118ed565b999c989b5096995094979396929594505050565b5f80604083850312156119fb575f80fd5b8235611a0681611685565b915060208301356117d181611685565b5f805f805f8060a08789031215611a2b575f80fd5b8635611a3681611685565b95506020870135611a4681611685565b9450604087013593506060870135925060808701356001600160401b03811115611a6e575f80fd5b611a7a89828a016118ed565b979a9699509497509295939492505050565b600181811c90821680611aa057607f821691505b602082108103611abe57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611b39575f80fd5b81516114b581611685565b60208082526038908201527f4552433131353544656c7461496e4552433732313a204e6f742066726f6d207460408201527f6865204552433131353544656c746120636f6e74726163740000000000000000606082015260800190565b60208082526025908201527f4552433131353544656c7461496e4552433732313a20496e76616c696420616d6040820152641bdbdd5b9d60da1b606082015260800190565b5f60208284031215611bf6575f80fd5b81516001600160401b03811115611c0b575f80fd5b8201601f81018413611c1b575f80fd5b8051611c296118b382611820565b818152856020838501011115611c3d575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156102cb576102cb611c5a565b808201808211156102cb576102cb611c5a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611d189083018461162e565b9695505050505050565b5f60208284031215611d32575f80fd5b81516114b5816115fb565b80820281158282048414176102cb576102cb611c5a565b5f81611d6257611d62611c5a565b505f19019056fea26469706673582212201f35b333b1ce6e85189dd6f2861f32b56375a958447c6bdc9f39b13fd9a6c1e864736f6c634300081a0033000000000000000000000000a80b12ffd0bfc7146ec9ed884c45e1bc4db2bf79000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000011505020455243373231205772617070657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035050570000000000000000000000000000000000000000000000000000000000