6080604052600a805460ff191690553480156200001b57600080fd5b50604051620022f3380380620022f38339810160408190526200003e916200014a565b60405180604001604052806012815260200171088d2c2dadedcc890c2dcc8cac888cac2e8d60731b8152506040518060400160405280600381526020016211121160ea1b8152508160009081620000969190620002b9565b506001620000a58282620002b9565b505050620000c2620000bc620000de60201b60201c565b620000e2565b60078290556009620000d58282620002b9565b50505062000385565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200015e57600080fd5b8251602080850151919350906001600160401b03808211156200018057600080fd5b818601915086601f8301126200019557600080fd5b815181811115620001aa57620001aa62000134565b604051601f8201601f19908116603f01168101908382118183101715620001d557620001d562000134565b816040528281528986848701011115620001ee57600080fd5b600093505b82841015620002125784840186015181850187015292850192620001f3565b60008684830101528096505050505050509250929050565b600181811c908216806200023f57607f821691505b6020821081036200026057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b457600081815260208120601f850160051c810160208610156200028f5750805b601f850160051c820191505b81811015620002b0578281556001016200029b565b5050505b505050565b81516001600160401b03811115620002d557620002d562000134565b620002ed81620002e684546200022a565b8462000266565b602080601f8311600181146200032557600084156200030c5750858301515b600019600386901b1c1916600185901b178555620002b0565b600085815260208120601f198616915b82811015620003565788860151825594840194600190910190840162000335565b5085821015620003755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611f5e80620003956000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80637d8966e4116100d8578063b88d4fde1161008c578063df6552b911610066578063df6552b914610302578063e985e9c51461030a578063f2fde38b1461035357600080fd5b8063b88d4fde146102c9578063c79b04c9146102dc578063c87b56dd146102ef57600080fd5b80639395c976116100bd5780639395c9761461029b57806395d89b41146102ae578063a22cb465146102b657600080fd5b80637d8966e4146102755780638da5cb5b1461027d57600080fd5b806342842e0e1161012f5780636ad1fe02116101145780636ad1fe021461023f57806370a082311461024c578063715018a61461026d57600080fd5b806342842e0e146102195780636352211e1461022c57600080fd5b8063081812fc11610160578063081812fc146101b9578063095ea7b3146101f157806323b872dd1461020657600080fd5b806301ffc9a71461017c57806306fdde03146101a4575b600080fd5b61018f61018a3660046118ec565b610366565b60405190151581526020015b60405180910390f35b6101ac61044b565b60405161019b919061196d565b6101cc6101c7366004611980565b6104dd565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6102046101ff3660046119c2565b610511565b005b6102046102143660046119ec565b61066e565b6102046102273660046119ec565b6106f5565b6101cc61023a366004611980565b610710565b600a5461018f9060ff1681565b61025f61025a366004611a28565b610782565b60405190815260200161019b565b610204610836565b61020461084a565b60065473ffffffffffffffffffffffffffffffffffffffff166101cc565b6102046102a9366004611a43565b610884565b6101ac610ace565b6102046102c4366004611ab8565b610add565b6102046102d7366004611bb7565b610aec565b6102046102ea366004611c33565b610b7a565b6101ac6102fd366004611980565b610b8e565b6101ac610baa565b61018f610318366004611c7c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610204610361366004611a28565b610c38565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806103f957507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061044557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461045a90611caf565b80601f016020809104026020016040519081016040528092919081815260200182805461048690611caf565b80156104d35780601f106104a8576101008083540402835291602001916104d3565b820191906000526020600020905b8154815290600101906020018083116104b657829003601f168201915b5050505050905090565b60006104e882610cd5565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061051c82610710565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806105ed57506105ed8133610318565b61065f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105bb565b6106698383610d46565b505050565b6106783382610de6565b6106ea5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105bb565b610669838383610ea6565b61066983838360405180602001604052806000815250610aec565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806104455760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105bb565b600073ffffffffffffffffffffffffffffffffffffffff821661080d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016105bb565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b61083e611153565b61084860006111ba565b565b610852611153565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b336000908152600b602052604090205460ff16156108e45760405162461bcd60e51b815260206004820152600b60248201527f4e465420434c41494d454400000000000000000000000000000000000000000060448201526064016105bb565b600a5460ff166109365760405162461bcd60e51b815260206004820152600b60248201527f6e6f74206f6e2073616c6500000000000000000000000000000000000000000060448201526064016105bb565b6000336040805173ffffffffffffffffffffffffffffffffffffffff909216602083015201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506109ef838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506007549150849050611231565b610a3b5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f660000000000000000000000000000000000000060448201526064016105bb565b6008805460009182610a4c83611d02565b909155509050610a5c3382611247565b336000818152600b602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590518381527ff2b290a76feb54be358b555507421d765609171aefa0646f109a653228ff81b8910160405180910390a250505050565b60606001805461045a90611caf565b610ae8338383611261565b5050565b610af63383610de6565b610b685760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016105bb565b610b7484848484611374565b50505050565b610b82611153565b6009610ae88282611daf565b6060610b9982610cd5565b6000610ba36113fd565b9392505050565b60098054610bb790611caf565b80601f0160208091040260200160405190810160405280929190818152602001828054610be390611caf565b8015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b505050505081565b610c40611153565b73ffffffffffffffffffffffffffffffffffffffff8116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105bb565b610cd2816111ba565b50565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16610cd25760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016105bb565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610da082610710565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610df283610710565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610e60575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610e9e57508373ffffffffffffffffffffffffffffffffffffffff16610e86846104dd565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610ec682610710565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105bb565b73ffffffffffffffffffffffffffffffffffffffff8216610fd75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105bb565b8273ffffffffffffffffffffffffffffffffffffffff16610ff782610710565b73ffffffffffffffffffffffffffffffffffffffff16146110805760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016105bb565b600081815260046020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60065473ffffffffffffffffffffffffffffffffffffffff1633146108485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bb565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008261123e858461140c565b14949350505050565b610ae8828260405180602001604052806000815250611459565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112dc5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105bb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61137f848484610ea6565b61138b848484846114e2565b610b745760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105bb565b60606009805461045a90611caf565b600081815b84518110156114515761143d8286838151811061143057611430611ec9565b60200260200101516116bb565b91508061144981611d02565b915050611411565b509392505050565b61146383836116e7565b61147060008484846114e2565b6106695760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105bb565b600073ffffffffffffffffffffffffffffffffffffffff84163b156116b0576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611559903390899088908890600401611ef8565b6020604051808303816000875af19250505080156115b2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526115af91810190611f41565b60015b611665573d8080156115e0576040519150601f19603f3d011682016040523d82523d6000602084013e6115e5565b606091505b50805160000361165d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105bb565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610e9e565b506001949350505050565b60008183106116d7576000828152602084905260409020610ba3565b5060009182526020526040902090565b73ffffffffffffffffffffffffffffffffffffffff821661174a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105bb565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117bc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105bb565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff161561182e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105bb565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610cd257600080fd5b6000602082840312156118fe57600080fd5b8135610ba3816118be565b6000815180845260005b8181101561192f57602081850181015186830182015201611913565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610ba36020830184611909565b60006020828403121561199257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b919050565b600080604083850312156119d557600080fd5b6119de83611999565b946020939093013593505050565b600080600060608486031215611a0157600080fd5b611a0a84611999565b9250611a1860208501611999565b9150604084013590509250925092565b600060208284031215611a3a57600080fd5b610ba382611999565b60008060208385031215611a5657600080fd5b823567ffffffffffffffff80821115611a6e57600080fd5b818501915085601f830112611a8257600080fd5b813581811115611a9157600080fd5b8660208260051b8501011115611aa657600080fd5b60209290920196919550909350505050565b60008060408385031215611acb57600080fd5b611ad483611999565b915060208301358015158114611ae957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611b3e57611b3e611af4565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611b8457611b84611af4565b81604052809350858152868686011115611b9d57600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215611bcd57600080fd5b611bd685611999565b9350611be460208601611999565b925060408501359150606085013567ffffffffffffffff811115611c0757600080fd5b8501601f81018713611c1857600080fd5b611c2787823560208401611b23565b91505092959194509250565b600060208284031215611c4557600080fd5b813567ffffffffffffffff811115611c5c57600080fd5b8201601f81018413611c6d57600080fd5b610e9e84823560208401611b23565b60008060408385031215611c8f57600080fd5b611c9883611999565b9150611ca660208401611999565b90509250929050565b600181811c90821680611cc357607f821691505b602082108103611cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b601f82111561066957600081815260208120601f850160051c81016020861015611d885750805b601f850160051c820191505b81811015611da757828155600101611d94565b505050505050565b815167ffffffffffffffff811115611dc957611dc9611af4565b611ddd81611dd78454611caf565b84611d61565b602080601f831160018114611e305760008415611dfa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611da7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611e7d57888601518255948401946001909101908401611e5e565b5085821015611eb957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f376080830184611909565b9695505050505050565b600060208284031215611f5357600080fd5b8151610ba3816118be5660f56b1ed2f9d441762ee99ce36788d31cf97b87201837a8e6de0ed841bab6050000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d584c64426264566163624c377772614b444a6d4a32755a4b646f6d46796f45386b4c75326b6a656168344b7300000000000000000000000000000000