60806040526001600560146101000a81548160ff02191690831515021790555061002d6102cc60201b60201c565b600a6100399190610721565b62989680610047919061076b565b6006556100586102cc60201b60201c565b600a6100649190610721565b620186a0610072919061076b565b6007556040518060400160405280600481526020017f566f696400000000000000000000000000000000000000000000000000000000815250600890816100b991906109dd565b506040518060400160405280600481526020017f564f494400000000000000000000000000000000000000000000000000000000815250600990816100fe91906109dd565b50336008805461010d90610810565b80601f016020809104026020016040519081016040528092919081815260200182805461013990610810565b80156101845780601f1061015b57610100808354040283529160200191610184565b820191905f5260205f20905b81548152906001019060200180831161016757829003601f168201915b50505050506009805461019690610810565b80601f01602080910402602001604051908101604052809291908181526020018280546101c290610810565b801561020d5780601f106101e45761010080835404028352916020019161020d565b820191905f5260205f20905b8154815290600101906020018083116101f057829003601f168201915b5050505050816003908161022191906109dd565b50806004908161023191906109dd565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a4575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161029b9190610aeb565b60405180910390fd5b6102b3816102d460201b60201c565b506102c75f3360065461039760201b60201c565b610b94565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103e7578060025f8282546103db9190610b04565b925050819055506104b5565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610470578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161046793929190610b46565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104fc578060025f8282540392505081905550610546565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105a39190610b7b565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156106325780860481111561060e5761060d6105b0565b5b600185161561061d5780820291505b808102905061062b856105dd565b94506105f2565b94509492505050565b5f8261064a5760019050610705565b81610657575f9050610705565b816001811461066d5760028114610677576106a6565b6001915050610705565b60ff841115610689576106886105b0565b5b8360020a9150848211156106a05761069f6105b0565b5b50610705565b5060208310610133831016604e8410600b84101617156106db5782820a9050838111156106d6576106d56105b0565b5b610705565b6106e884848460016105e9565b925090508184048111156106ff576106fe6105b0565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61072b8261070c565b915061073683610715565b92506107637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461063b565b905092915050565b5f6107758261070c565b91506107808361070c565b925082820261078e8161070c565b915082820484148315176107a5576107a46105b0565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061082757607f821691505b60208210810361083a576108396107e3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261089c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610861565b6108a68683610861565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6108e16108dc6108d78461070c565b6108be565b61070c565b9050919050565b5f819050919050565b6108fa836108c7565b61090e610906826108e8565b84845461086d565b825550505050565b5f90565b610922610916565b61092d8184846108f1565b505050565b5b81811015610950576109455f8261091a565b600181019050610933565b5050565b601f8211156109955761096681610840565b61096f84610852565b8101602085101561097e578190505b61099261098a85610852565b830182610932565b50505b505050565b5f82821c905092915050565b5f6109b55f198460080261099a565b1980831691505092915050565b5f6109cd83836109a6565b9150826002028217905092915050565b6109e6826107ac565b67ffffffffffffffff8111156109ff576109fe6107b6565b5b610a098254610810565b610a14828285610954565b5f60209050601f831160018114610a45575f8415610a33578287015190505b610a3d85826109c2565b865550610aa4565b601f198416610a5386610840565b5f5b82811015610a7a57848901518255600182019150602085019450602081019050610a55565b86831015610a975784890151610a93601f8916826109a6565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ad582610aac565b9050919050565b610ae581610acb565b82525050565b5f602082019050610afe5f830184610adc565b92915050565b5f610b0e8261070c565b9150610b198361070c565b9250828201905080821115610b3157610b306105b0565b5b92915050565b610b408161070c565b82525050565b5f606082019050610b595f830186610adc565b610b666020830185610b37565b610b736040830184610b37565b949350505050565b5f602082019050610b8e5f830184610b37565b92915050565b6132f780610ba15f395ff3fe608060405260043610610212575f3560e01c806370a0823111610117578063a9059cbb1161009f578063dd62ed3e1161006e578063dd62ed3e14610818578063e475826a14610854578063f2fde38b14610890578063fa3c4e12146108b8578063fcacb262146108e057610219565b8063a9059cbb1461074b578063c2c0bfea14610787578063c53f7782146107c3578063db05e5cb1461080257610219565b806395d89b41116100e657806395d89b4114610642578063973fbc7f1461066c578063987b58c814610694578063994ae2fa146106d0578063a77a243d1461070f57610219565b806370a082311461059c578063715018a6146105d85780638ad6645d146105ee5780638da5cb5b1461061857610219565b80633b18eab41161019a5780635b758d21116101695780635b758d21146104aa578063620cc86c146104e6578063676c84581461050e578063683ee2ab1461053857806369958cf41461057457610219565b80633b18eab4146103db578063433db68314610405578063496e63451461042f5780634de4cd991461046b57610219565b806317758f09116101e157806317758f09146102fb57806318160ddd14610323578063234ea8771461034d57806323b872dd14610375578063313ce567146103b157610219565b806306fdde031461021d57806308a4bbda14610247578063095ea7b3146102835780630a9a3050146102bf57610219565b3661021957005b5f80fd5b348015610228575f80fd5b5061023161091f565b60405161023e919061230a565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612395565b6109af565b60405161027a919061230a565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a491906123f3565b610a4a565b6040516102b6919061244b565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190612395565b610a6c565b6040516102f2919061244b565b60405180910390f35b348015610306575f80fd5b50610321600480360381019061031c91906125ef565b610a89565b005b34801561032e575f80fd5b50610337610b85565b604051610344919061267e565b60405180910390f35b348015610358575f80fd5b50610373600480360381019061036e919061276b565b610b8e565b005b348015610380575f80fd5b5061039b60048036038101906103969190612807565b610c4d565b6040516103a8919061244b565b60405180910390f35b3480156103bc575f80fd5b506103c5610c7b565b6040516103d29190612866565b60405180910390f35b3480156103e6575f80fd5b506103ef610c83565b6040516103fc919061244b565b60405180910390f35b348015610410575f80fd5b50610419610c96565b604051610426919061267e565b60405180910390f35b34801561043a575f80fd5b5061045560048036038101906104509190612395565b610ca2565b604051610462919061230a565b60405180910390f35b348015610476575f80fd5b50610491600480360381019061048c919061287f565b610d3d565b6040516104a194939291906128fc565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb9190612395565b610efa565b6040516104dd919061230a565b60405180910390f35b3480156104f1575f80fd5b5061050c6004803603810190610507919061287f565b610f95565b005b348015610519575f80fd5b50610522610fc5565b60405161052f919061267e565b60405180910390f35b348015610543575f80fd5b5061055e60048036038101906105599190612395565b610fcb565b60405161056b919061295c565b60405180910390f35b34801561057f575f80fd5b5061059a6004803603810190610595919061276b565b610fe7565b005b3480156105a7575f80fd5b506105c260048036038101906105bd9190612395565b6110a6565b6040516105cf919061267e565b60405180910390f35b3480156105e3575f80fd5b506105ec6110eb565b005b3480156105f9575f80fd5b506106026110fe565b60405161060f919061267e565b60405180910390f35b348015610623575f80fd5b5061062c61110a565b6040516106399190612984565b60405180910390f35b34801561064d575f80fd5b50610656611132565b604051610663919061230a565b60405180910390f35b348015610677575f80fd5b50610692600480360381019061068d91906125ef565b6111c2565b005b34801561069f575f80fd5b506106ba60048036038101906106b59190612395565b6112be565b6040516106c7919061244b565b60405180910390f35b3480156106db575f80fd5b506106f660048036038101906106f1919061287f565b6112db565b60405161070694939291906128fc565b60405180910390f35b34801561071a575f80fd5b5061073560048036038101906107309190612395565b611498565b604051610742919061295c565b60405180910390f35b348015610756575f80fd5b50610771600480360381019061076c91906123f3565b6114b4565b60405161077e919061244b565b60405180910390f35b348015610792575f80fd5b506107ad60048036038101906107a89190612395565b6114d6565b6040516107ba919061295c565b60405180910390f35b3480156107ce575f80fd5b506107e960048036038101906107e4919061287f565b6114f2565b6040516107f994939291906128fc565b60405180910390f35b34801561080d575f80fd5b50610816611651565b005b348015610823575f80fd5b5061083e6004803603810190610839919061299d565b611685565b60405161084b919061267e565b60405180910390f35b34801561085f575f80fd5b5061087a60048036038101906108759190612395565b611707565b604051610887919061244b565b60405180910390f35b34801561089b575f80fd5b506108b660048036038101906108b19190612395565b611724565b005b3480156108c3575f80fd5b506108de60048036038101906108d991906125ef565b6117a8565b005b3480156108eb575f80fd5b506109066004803603810190610901919061287f565b6118a4565b60405161091694939291906128fc565b60405180910390f35b60606003805461092e90612a08565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90612a08565b80156109a55780601f1061097c576101008083540402835291602001916109a5565b820191905f5260205f20905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b6010602052805f5260405f205f9150905080546109cb90612a08565b80601f01602080910402602001604051908101604052809291908181526020018280546109f790612a08565b8015610a425780601f10610a1957610100808354040283529160200191610a42565b820191905f5260205f20905b815481529060010190602001808311610a2557829003601f168201915b505050505081565b5f80610a54611a03565b9050610a61818585611a0a565b600191505092915050565b600f602052805f5260405f205f915054906101000a900460ff1681565b8260125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508160135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209081610b279190612bd5565b508060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690835f0b60ff16021790555050505050565b5f600254905090565b600b604051806080016040528086815260200185151581526020018481526020018360ff16815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f019081610bef9190612bd5565b506020820151816001015f6101000a81548160ff0219169083151502179055506040820151816002019081610c249190612cfc565b506060820151816003015f6101000a81548160ff021916908360ff160217905550505050505050565b5f80610c57611a03565b9050610c64858285611a1c565b610c6f858585611aae565b60019150509392505050565b5f6012905090565b600560149054906101000a900460ff1681565b5f600b80549050905090565b6013602052805f5260405f205f915090508054610cbe90612a08565b80601f0160208091040260200160405190810160405280929190818152602001828054610cea90612a08565b8015610d355780601f10610d0c57610100808354040283529160200191610d35565b820191905f5260205f20905b815481529060010190602001808311610d1857829003601f168201915b505050505081565b60605f60605f600b805490508510610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8190612e15565b60405180910390fd5b5f600b8681548110610d9f57610d9e612e33565b5b905f5260205f2090600402019050805f01816001015f9054906101000a900460ff1682600201836003015f9054906101000a900460ff16838054610de290612a08565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0e90612a08565b8015610e595780601f10610e3057610100808354040283529160200191610e59565b820191905f5260205f20905b815481529060010190602001808311610e3c57829003601f168201915b50505050509350818054610e6c90612a08565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9890612a08565b8015610ee35780601f10610eba57610100808354040283529160200191610ee3565b820191905f5260205f20905b815481529060010190602001808311610ec657829003601f168201915b505050505091509450945094509450509193509193565b600d602052805f5260405f205f915090508054610f1690612a08565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4290612a08565b8015610f8d5780601f10610f6457610100808354040283529160200191610f8d565b820191905f5260205f20905b815481529060010190602001808311610f7057829003601f168201915b505050505081565b610f9d611b9e565b610fa5610c7b565b600a610fb19190612fbc565b81610fbc9190613006565b60078190555050565b60075481565b6014602052805f5260405f205f915054906101000a90045f0b81565b600a604051806080016040528086815260200185151581526020018481526020018360ff16815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f0190816110489190612bd5565b506020820151816001015f6101000a81548160ff021916908315150217905550604082015181600201908161107d9190612cfc565b506060820151816003015f6101000a81548160ff021916908360ff160217905550505050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110f3611b9e565b6110fc5f611c25565b565b5f600a80549050905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461114190612a08565b80601f016020809104026020016040519081016040528092919081815260200182805461116d90612a08565b80156111b85780601f1061118f576101008083540402835291602001916111b8565b820191905f5260205f20905b81548152906001019060200180831161119b57829003601f168201915b5050505050905090565b82600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555081600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090816112609190612bd5565b5080600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690835f0b60ff16021790555050505050565b600c602052805f5260405f205f915054906101000a900460ff1681565b60605f60605f600a805490508510611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90612e15565b60405180910390fd5b5f600a868154811061133d5761133c612e33565b5b905f5260205f2090600402019050805f01816001015f9054906101000a900460ff1682600201836003015f9054906101000a900460ff1683805461138090612a08565b80601f01602080910402602001604051908101604052809291908181526020018280546113ac90612a08565b80156113f75780601f106113ce576101008083540402835291602001916113f7565b820191905f5260205f20905b8154815290600101906020018083116113da57829003601f168201915b5050505050935081805461140a90612a08565b80601f016020809104026020016040519081016040528092919081815260200182805461143690612a08565b80156114815780601f1061145857610100808354040283529160200191611481565b820191905f5260205f20905b81548152906001019060200180831161146457829003601f168201915b505050505091509450945094509450509193509193565b600e602052805f5260405f205f915054906101000a90045f0b81565b5f806114be611a03565b90506114cb818585611aae565b600191505092915050565b6011602052805f5260405f205f915054906101000a90045f0b81565b600b8181548110611501575f80fd5b905f5260205f2090600402015f91509050805f01805461152090612a08565b80601f016020809104026020016040519081016040528092919081815260200182805461154c90612a08565b80156115975780601f1061156e57610100808354040283529160200191611597565b820191905f5260205f20905b81548152906001019060200180831161157a57829003601f168201915b505050505090806001015f9054906101000a900460ff16908060020180546115be90612a08565b80601f01602080910402602001604051908101604052809291908181526020018280546115ea90612a08565b80156116355780601f1061160c57610100808354040283529160200191611635565b820191905f5260205f20905b81548152906001019060200180831161161857829003601f168201915b505050505090806003015f9054906101000a900460ff16905084565b611659611b9e565b600560149054906101000a900460ff1615600560146101000a81548160ff021916908315150217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b61172c611b9e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361179c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016117939190612984565b60405180910390fd5b6117a581611c25565b50565b82600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508160105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090816118469190612bd5565b508060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690835f0b60ff16021790555050505050565b600a81815481106118b3575f80fd5b905f5260205f2090600402015f91509050805f0180546118d290612a08565b80601f01602080910402602001604051908101604052809291908181526020018280546118fe90612a08565b80156119495780601f1061192057610100808354040283529160200191611949565b820191905f5260205f20905b81548152906001019060200180831161192c57829003601f168201915b505050505090806001015f9054906101000a900460ff169080600201805461197090612a08565b80601f016020809104026020016040519081016040528092919081815260200182805461199c90612a08565b80156119e75780601f106119be576101008083540402835291602001916119e7565b820191905f5260205f20905b8154815290600101906020018083116119ca57829003601f168201915b505050505090806003015f9054906101000a900460ff16905084565b5f33905090565b611a178383836001611ce8565b505050565b5f611a278484611685565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611aa85781811015611a99578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611a9093929190613047565b60405180910390fd5b611aa784848484035f611ce8565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b1e575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b159190612984565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b8e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611b859190612984565b60405180910390fd5b611b99838383611eb7565b505050565b611ba6611a03565b73ffffffffffffffffffffffffffffffffffffffff16611bc461110a565b73ffffffffffffffffffffffffffffffffffffffff1614611c2357611be7611a03565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611c1a9190612984565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d58575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d4f9190612984565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc8575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611dbf9190612984565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611eb1578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611ea8919061267e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906130ec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a9061317a565b60405180910390fd5b5f8111611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90613208565b60405180910390fd5b611fdd61110a565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146120715760011515600560149054906101000a900460ff161515036120705760075481111561206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690613270565b60405180910390fd5b5b5b61207c838383612081565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d1578060025f8282546120c5919061328e565b9250508190555061219f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561215a578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161215193929190613047565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e6578060025f8282540392505081905550612230565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228d919061267e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6122dc8261229a565b6122e681856122a4565b93506122f68185602086016122b4565b6122ff816122c2565b840191505092915050565b5f6020820190508181035f83015261232281846122d2565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6123648261233b565b9050919050565b6123748161235a565b811461237e575f80fd5b50565b5f8135905061238f8161236b565b92915050565b5f602082840312156123aa576123a9612333565b5b5f6123b784828501612381565b91505092915050565b5f819050919050565b6123d2816123c0565b81146123dc575f80fd5b50565b5f813590506123ed816123c9565b92915050565b5f806040838503121561240957612408612333565b5b5f61241685828601612381565b9250506020612427858286016123df565b9150509250929050565b5f8115159050919050565b61244581612431565b82525050565b5f60208201905061245e5f83018461243c565b92915050565b61246d81612431565b8114612477575f80fd5b50565b5f8135905061248881612464565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124cc826122c2565b810181811067ffffffffffffffff821117156124eb576124ea612496565b5b80604052505050565b5f6124fd61232a565b905061250982826124c3565b919050565b5f67ffffffffffffffff82111561252857612527612496565b5b612531826122c2565b9050602081019050919050565b828183375f83830152505050565b5f61255e6125598461250e565b6124f4565b90508281526020810184848401111561257a57612579612492565b5b61258584828561253e565b509392505050565b5f82601f8301126125a1576125a061248e565b5b81356125b184826020860161254c565b91505092915050565b5f815f0b9050919050565b6125ce816125ba565b81146125d8575f80fd5b50565b5f813590506125e9816125c5565b92915050565b5f805f806080858703121561260757612606612333565b5b5f61261487828801612381565b94505060206126258782880161247a565b935050604085013567ffffffffffffffff81111561264657612645612337565b5b6126528782880161258d565b9250506060612663878288016125db565b91505092959194509250565b612678816123c0565b82525050565b5f6020820190506126915f83018461266f565b92915050565b5f67ffffffffffffffff8211156126b1576126b0612496565b5b6126ba826122c2565b9050602081019050919050565b5f6126d96126d484612697565b6124f4565b9050828152602081018484840111156126f5576126f4612492565b5b61270084828561253e565b509392505050565b5f82601f83011261271c5761271b61248e565b5b813561272c8482602086016126c7565b91505092915050565b5f60ff82169050919050565b61274a81612735565b8114612754575f80fd5b50565b5f8135905061276581612741565b92915050565b5f805f806080858703121561278357612782612333565b5b5f85013567ffffffffffffffff8111156127a05761279f612337565b5b6127ac8782880161258d565b94505060206127bd8782880161247a565b935050604085013567ffffffffffffffff8111156127de576127dd612337565b5b6127ea87828801612708565b92505060606127fb87828801612757565b91505092959194509250565b5f805f6060848603121561281e5761281d612333565b5b5f61282b86828701612381565b935050602061283c86828701612381565b925050604061284d868287016123df565b9150509250925092565b61286081612735565b82525050565b5f6020820190506128795f830184612857565b92915050565b5f6020828403121561289457612893612333565b5b5f6128a1848285016123df565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6128ce826128aa565b6128d881856128b4565b93506128e88185602086016122b4565b6128f1816122c2565b840191505092915050565b5f6080820190508181035f83015261291481876122d2565b9050612923602083018661243c565b818103604083015261293581856128c4565b90506129446060830184612857565b95945050505050565b612956816125ba565b82525050565b5f60208201905061296f5f83018461294d565b92915050565b61297e8161235a565b82525050565b5f6020820190506129975f830184612975565b92915050565b5f80604083850312156129b3576129b2612333565b5b5f6129c085828601612381565b92505060206129d185828601612381565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1f57607f821691505b602082108103612a3257612a316129db565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612a947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a59565b612a9e8683612a59565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612ad9612ad4612acf846123c0565b612ab6565b6123c0565b9050919050565b5f819050919050565b612af283612abf565b612b06612afe82612ae0565b848454612a65565b825550505050565b5f90565b612b1a612b0e565b612b25818484612ae9565b505050565b5b81811015612b4857612b3d5f82612b12565b600181019050612b2b565b5050565b601f821115612b8d57612b5e81612a38565b612b6784612a4a565b81016020851015612b76578190505b612b8a612b8285612a4a565b830182612b2a565b50505b505050565b5f82821c905092915050565b5f612bad5f1984600802612b92565b1980831691505092915050565b5f612bc58383612b9e565b9150826002028217905092915050565b612bde8261229a565b67ffffffffffffffff811115612bf757612bf6612496565b5b612c018254612a08565b612c0c828285612b4c565b5f60209050601f831160018114612c3d575f8415612c2b578287015190505b612c358582612bba565b865550612c9c565b601f198416612c4b86612a38565b5f5b82811015612c7257848901518255600182019150602085019450602081019050612c4d565b86831015612c8f5784890151612c8b601f891682612b9e565b8355505b6001600288020188555050505b505050505050565b5f819050815f5260205f209050919050565b601f821115612cf757612cc881612ca4565b612cd184612a4a565b81016020851015612ce0578190505b612cf4612cec85612a4a565b830182612b2a565b50505b505050565b612d05826128aa565b67ffffffffffffffff811115612d1e57612d1d612496565b5b612d288254612a08565b612d33828285612cb6565b5f60209050601f831160018114612d64575f8415612d52578287015190505b612d5c8582612bba565b865550612dc3565b601f198416612d7286612ca4565b5f5b82811015612d9957848901518255600182019150602085019450602081019050612d74565b86831015612db65784890151612db2601f891682612b9e565b8355505b6001600288020188555050505b505050505050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f612dff6013836122a4565b9150612e0a82612dcb565b602082019050919050565b5f6020820190508181035f830152612e2c81612df3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612ee257808604811115612ebe57612ebd612e60565b5b6001851615612ecd5780820291505b8081029050612edb85612e8d565b9450612ea2565b94509492505050565b5f82612efa5760019050612fb5565b81612f07575f9050612fb5565b8160018114612f1d5760028114612f2757612f56565b6001915050612fb5565b60ff841115612f3957612f38612e60565b5b8360020a915084821115612f5057612f4f612e60565b5b50612fb5565b5060208310610133831016604e8410600b8410161715612f8b5782820a905083811115612f8657612f85612e60565b5b612fb5565b612f988484846001612e99565b92509050818404811115612faf57612fae612e60565b5b81810290505b9392505050565b5f612fc6826123c0565b9150612fd183612735565b9250612ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612eeb565b905092915050565b5f613010826123c0565b915061301b836123c0565b9250828202613029816123c0565b915082820484148315176130405761303f612e60565b5b5092915050565b5f60608201905061305a5f830186612975565b613067602083018561266f565b613074604083018461266f565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130d66025836122a4565b91506130e18261307c565b604082019050919050565b5f6020820190508181035f830152613103816130ca565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6131646023836122a4565b915061316f8261310a565b604082019050919050565b5f6020820190508181035f83015261319181613158565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6131f26029836122a4565b91506131fd82613198565b604082019050919050565b5f6020820190508181035f83015261321f816131e6565b9050919050565b7f4d617820416d6f756e74206f6620746f6b656e7320696e2074780000000000005f82015250565b5f61325a601a836122a4565b915061326582613226565b602082019050919050565b5f6020820190508181035f8301526132878161324e565b9050919050565b5f613298826123c0565b91506132a3836123c0565b92508282019050808211156132bb576132ba612e60565b5b9291505056fea264697066735822122046c5300c661a7d1ddce334236e832f6b0414bba7076b528e36daeb23413ed44764736f6c634300081a0033