0x60806040523480156200001157600080fd5b5060405162001fe538038062001fe583398181016040528101906200003791906200031c565b6040518060400160405280600e81526020017f50696e656170706c65546f6b656e0000000000000000000000000000000000008152506040518060400160405280600381526020017f504e4c00000000000000000000000000000000000000000000000000000000008152506201d4c08260049081620000b89190620005c8565b508160059081620000ca9190620005c8565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200011e81336200012860201b60201c565b50505050620007ca565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620001bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b29062000710565b60405180910390fd5b620001cf60008284620002ad60201b60201c565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000220919062000761565b92505081905550816000808282546200023a919062000761565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620002a19190620007ad565b60405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002e482620002b7565b9050919050565b620002f681620002d7565b81146200030257600080fd5b50565b6000815190506200031681620002eb565b92915050565b600060208284031215620003355762000334620002b2565b5b6000620003458482850162000305565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d057607f821691505b602082108103620003e657620003e562000388565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000411565b6200045c868362000411565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004a9620004a36200049d8462000474565b6200047e565b62000474565b9050919050565b6000819050919050565b620004c58362000488565b620004dd620004d482620004b0565b8484546200041e565b825550505050565b600090565b620004f4620004e5565b62000501818484620004ba565b505050565b5b8181101562000529576200051d600082620004ea565b60018101905062000507565b5050565b601f82111562000578576200054281620003ec565b6200054d8462000401565b810160208510156200055d578190505b620005756200056c8562000401565b83018262000506565b50505b505050565b600082821c905092915050565b60006200059d600019846008026200057d565b1980831691505092915050565b6000620005b883836200058a565b9150826002028217905092915050565b620005d3826200034e565b67ffffffffffffffff811115620005ef57620005ee62000359565b5b620005fb8254620003b7565b620006088282856200052d565b600060209050601f8311600181146200064057600084156200062b578287015190505b620006378582620005aa565b865550620006a7565b601f1984166200065086620003ec565b60005b828110156200067a5784890151825560018201915060208501945060208101905062000653565b868310156200069a578489015162000696601f8916826200058a565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000620006f8600d83620006af565b91506200070582620006c0565b602082019050919050565b600060208201905081810360008301526200072b81620006e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200076e8262000474565b91506200077b8362000474565b925082820190508082111562000796576200079562000732565b5b92915050565b620007a78162000474565b82525050565b6000602082019050620007c460008301846200079c565b92915050565b61180b80620007da6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806394bf804d1161007157806394bf804d1461017b57806395d89b41146101975780639dc29fac146101b5578063a9059cbb146101d1578063d8b66ae1146101ed578063dd62ed3e14610209576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd146100f357806323b872dd14610111578063313ce5671461012d57806370a082311461014b575b600080fd5b6100c1610239565b6040516100ce9190610f28565b60405180910390f35b6100f160048036038101906100ec9190610ff2565b6102cb565b005b6100fb6102da565b6040516101089190611041565b60405180910390f35b61012b6004803603810190610126919061105c565b6102e3565b005b6101356105a5565b6040516101429190611041565b60405180910390f35b610165600480360381019061016091906110af565b6105ae565b6040516101729190611041565b60405180910390f35b610195600480360381019061019091906110dc565b6105f7565b005b61019f61076b565b6040516101ac9190610f28565b60405180910390f35b6101cf60048036038101906101ca9190610ff2565b6107fd565b005b6101eb60048036038101906101e69190610ff2565b61090b565b005b61020760048036038101906102029190611327565b610a7a565b005b610223600480360381019061021e919061139f565b610b2d565b6040516102309190611041565b60405180910390f35b6060600480546102489061140e565b80601f01602080910402602001604051908101604052809291908181526020018280546102749061140e565b80156102c15780601f10610296576101008083540402835291602001916102c1565b820191906000526020600020905b8154815290600101906020018083116102a457829003601f168201915b5050505050905090565b6102d6338383610bb4565b5050565b60008054905090565b8281806102ef836105ae565b1015610330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103279061148b565b60405180910390fd5b61033b858585610c9f565b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156103fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f1906114f7565b60405180910390fd5b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104869190611546565b9250508190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104dc9190611546565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610532919061157a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516105969190611041565b60405180910390a35050505050565b60006012905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067e906115fa565b60405180910390fd5b61069360008284610c9f565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106e2919061157a565b92505081905550816000808282546106fa919061157a565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161075f9190611041565b60405180910390a35050565b60606005805461077a9061140e565b80601f01602080910402602001604051908101604052809291908181526020018280546107a69061140e565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610884906115fa565b60405180910390fd5b61089982600083610c9f565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108e89190611546565b92505081905550806000808282546109009190611546565b925050819055505050565b338180610917836105ae565b1015610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f9061148b565b60405180910390fd5b610963338585610c9f565b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b29190611546565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a08919061157a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a6c9190611041565b60405180910390a350505050565b8051825114610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590611666565b60405180910390fd5b60005b8251811015610b28576000838281518110610adf57610ade611686565b5b602002602001015190506000838381518110610afe57610afd611686565b5b60200260200101519050610b13338383610ca4565b50508080610b20906116b5565b915050610ac1565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6e11fb1b7f119e3f2fa29896ef5fdf8b8a2d0d4df6fe90ba8668e7d8b2ffa25e83604051610c929190611041565b60405180910390a3505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90611749565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d79906117b5565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dd19190611546565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e27919061157a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e8b9190611041565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ed2578082015181840152602081019050610eb7565b60008484015250505050565b6000601f19601f8301169050919050565b6000610efa82610e98565b610f048185610ea3565b9350610f14818560208601610eb4565b610f1d81610ede565b840191505092915050565b60006020820190508181036000830152610f428184610eef565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f8982610f5e565b9050919050565b610f9981610f7e565b8114610fa457600080fd5b50565b600081359050610fb681610f90565b92915050565b6000819050919050565b610fcf81610fbc565b8114610fda57600080fd5b50565b600081359050610fec81610fc6565b92915050565b6000806040838503121561100957611008610f54565b5b600061101785828601610fa7565b925050602061102885828601610fdd565b9150509250929050565b61103b81610fbc565b82525050565b60006020820190506110566000830184611032565b92915050565b60008060006060848603121561107557611074610f54565b5b600061108386828701610fa7565b935050602061109486828701610fa7565b92505060406110a586828701610fdd565b9150509250925092565b6000602082840312156110c5576110c4610f54565b5b60006110d384828501610fa7565b91505092915050565b600080604083850312156110f3576110f2610f54565b5b600061110185828601610fdd565b925050602061111285828601610fa7565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61115982610ede565b810181811067ffffffffffffffff8211171561117857611177611121565b5b80604052505050565b600061118b610f4a565b90506111978282611150565b919050565b600067ffffffffffffffff8211156111b7576111b6611121565b5b602082029050602081019050919050565b600080fd5b60006111e06111db8461119c565b611181565b90508083825260208201905060208402830185811115611203576112026111c8565b5b835b8181101561122c57806112188882610fa7565b845260208401935050602081019050611205565b5050509392505050565b600082601f83011261124b5761124a61111c565b5b813561125b8482602086016111cd565b91505092915050565b600067ffffffffffffffff82111561127f5761127e611121565b5b602082029050602081019050919050565b60006112a361129e84611264565b611181565b905080838252602082019050602084028301858111156112c6576112c56111c8565b5b835b818110156112ef57806112db8882610fdd565b8452602084019350506020810190506112c8565b5050509392505050565b600082601f83011261130e5761130d61111c565b5b813561131e848260208601611290565b91505092915050565b6000806040838503121561133e5761133d610f54565b5b600083013567ffffffffffffffff81111561135c5761135b610f59565b5b61136885828601611236565b925050602083013567ffffffffffffffff81111561138957611388610f59565b5b611395858286016112f9565b9150509250929050565b600080604083850312156113b6576113b5610f54565b5b60006113c485828601610fa7565b92505060206113d585828601610fa7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061142657607f821691505b602082108103611439576114386113df565b5b50919050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b6000611475601283610ea3565b91506114808261143f565b602082019050919050565b600060208201905081810360008301526114a481611468565b9050919050565b7f436865636b20616c6c6f77616e63652100000000000000000000000000000000600082015250565b60006114e1601083610ea3565b91506114ec826114ab565b602082019050919050565b60006020820190508181036000830152611510816114d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061155182610fbc565b915061155c83610fbc565b925082820390508181111561157457611573611517565b5b92915050565b600061158582610fbc565b915061159083610fbc565b92508282019050808211156115a8576115a7611517565b5b92915050565b7f4e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b60006115e4600d83610ea3565b91506115ef826115ae565b602082019050919050565b60006020820190508181036000830152611613816115d7565b9050919050565b7f496e76616c696420696e70757400000000000000000000000000000000000000600082015250565b6000611650600d83610ea3565b915061165b8261161a565b602082019050919050565b6000602082019050818103600083015261167f81611643565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006116c082610fbc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116f2576116f1611517565b5b600182019050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6000611733601e83610ea3565b915061173e826116fd565b602082019050919050565b6000602082019050818103600083015261176281611726565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b600061179f601c83610ea3565b91506117aa82611769565b602082019050919050565b600060208201905081810360008301526117ce81611792565b905091905056fea264697066735822122067a5f3a3aa3c5be42f5f6bc402f5213d2597ddc0fca2eb9f53584493b88ffb0364736f6c6343000812003300000000000000000000000003c99dc0ac4bd5ada983de615416443b24bf98d6