In the params section, change rxn multiplier to 0.5 if doing 1/2 reactions, or 0.25 if doing 1/4 reactions.
2. mRNA Capture
This protocol requires 50 ng – 1 μg of intact total RNA, in 50 μL of RNase-free water. Degraded or fragmented total RNA will result in significant 3’-bias. This protocol has been optimized to isolate mature mRNA from total RNA through two subsequent capture steps using mRNA Capture Beads. Other RNA molecules with homopolymeric adenosine regions may also be isolated. RNA samples should only be kept on ice where specified in this protocol, since low temperatures may promote non-specific capture, resulting in increased rRNA levels in the captured mRNA. Before starting, equilibrate mRNA Capture Beads, mRNA Bead Binding Buffer, mRNA Bead Wash Buffer and Fragment, Prime and Elute Buffer (2X) to room temperature. Before use, beads must be washed with mRNA Bead Binding Buffer (steps 2.1 – 2.5).
2.1
Resuspend the mRNA Capture Beads thoroughly by pipetting up and down gently, or by using a vortex mixer on a low to medium speed setting to prevent foaming. High-speed vortexing or shaking should be avoided to prevent foaming. Refer to Important Parameters: mRNA Capture Beads (p. 4) for more information.
2.2
For each library to be prepared, transfer 52.5 μL (50 μL + 5% excess) of the resuspended mRNA Capture Beads into an appropriate tube. When preparing multiple libraries, beads for up to 24 libraries (1260 μL) may be washed in a single tube. When preparing more than 24 libraries, wash beads in multiple batches. Please refer to Important Parameters: mRNA Capture Beads for additional recommendations regarding bulk bead washing.
2.3
Place the tube on a magnet and incubate at room temperature until the solution is clear. Carefully remove and discard the supernatant, and replace it with an equal volume of mRNA Bead Binding Buffer (52.5 μL per library).
2.4
Remove the tube from the magnet and resuspend the beads by pipetting up and down, or by low to medium speed vortexing. Be careful to avoid producing excessive foam.
2.5
Place the tube on the magnet and incubate at room temperature until the solution is clear. Carefully remove and discard the supernatant, and replace it with an equal volume of mRNA Bead Binding Buffer (52.5 μL per library).
2.6
Remove the tube from the magnet and resuspend the beads by pipetting up and down, or by low to medium speed vortexing. Be careful to avoid producing excessive foam.
2.7
For each RNA sample to be captured, transfer 50 μL of resuspended mRNA Capture Beads into individual tubes or wells of a plate.
2.8
To each well/tube, add 50 μL of the appropriate RNA sample (in RNase-free water).
2.9
Mix thoroughly by gently pipetting up and down several times.
2.10
Place the plate/tube(s) in a thermocycler and perform the 1st mRNA capture as follows:
1st mRNA capture |
65˚C |
2 min |
Cool |
20˚C |
5 min |
2.11
Place the plate/tube(s) containing the mixture of mRNA Capture Beads and RNA, on a magnet and incubate at room temperature until the solution is clear. Remove and discard the supernatant.
2.12
Remove the plate/tube(s) from the magnet and resuspend thoroughly in 200 μL of mRNA Bead Wash Buffer by pipetting up and down several times.
2.13
Place the plate/tube(s) on the magnet and incubate at room temperature until the solution is clear. Remove and discard the supernatant.
2.14
Resuspend the beads in 50 μL of RNase-free water.
2.15
Place the plate/tube(s) in a thermocycler and perform the 2nd mRNA capture as follows:
2nd mRNA capture |
70˚C |
2 min |
Cool |
20˚C |
5 min |
2.16
Add 50 μL of Bead Binding Buffer to the mixture of mRNA Capture Beads and RNA, and mix thoroughly by gently pipetting up and down several times.
2.17
Incubate the plate/tube(s) at 20°C for 5 min.
2.18
Place the plate/tube(s) on the magnet and incubate at room temperature until the solution is clear. Remove and discard the supernatant.
2.19
Remove the beads from the magnet and resuspend in 200 μL of mRNA Bead Wash Buffer by pipetting up and down several times.
2.20
Place the plate/tube(s) on the magnet and incubate at room temperature until the solution is clear. Remove and discard the entire volume of supernatant. Caution: carryover of mRNA Bead Wash Buffer may inhibit 1st strand cDNA synthesis.
LS0tCnRpdGxlOiAibVJOQSBDYXB0dXJlIHVzaW5nIEthcGEgbVJOQSBIeXBlciBraXQiCm91dHB1dDogaHRtbF9ub3RlYm9vawpwYXJhbXM6CiAgbnVtX3NhbXBsZXM6IDIyCiAgcnhuX211bHRpcGxpZXI6IDEKLS0tCltNYW51ZmFjdHVyZXIncyBJbnN0cnVjdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9waW5za3lsYWIvbGFib3JhdG9yeS9ibG9iL21hc3Rlci9kb2N1bWVudGF0aW9uL2thcGEtbXJuYS1oeXBlci5wZGYpCgpJbiB0aGUgcGFyYW1zIHNlY3Rpb24sIGNoYW5nZSByeG4gbXVsdGlwbGllciB0byAwLjUgaWYgZG9pbmcgMS8yIHJlYWN0aW9ucywgb3IgMC4yNSBpZiBkb2luZyAxLzQgcmVhY3Rpb25zLgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoa2FibGVFeHRyYSkKYGBgCgpgYGB7cn0KbXJuYV9jYXB0dXJlIDwtIHRyaWJibGUofml0ZW0sIH5xdWFudGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgImthcGFfbXJuYV9oeXBlcl9raXRfc2NyaXB0X3VsIiwgcGFyYW1zJG51bV9zYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAidHViZXNfMS43bWwiLCA1LAogICAgICAgICAgICAgICAgICAgICAgICAiZmFsY29uXzE1bWwiLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAiZmFsY29uXzUwbWwiLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAidHViZXNfMjAwdWwiLCBwYXJhbXMkbnVtX3NhbXBsZXMgKiAzLAogICAgICAgICAgICAgICAgICAgICAgICAicGxhdGVzIiwgcGFyYW1zJG51bV9zYW1wbGVzICogMSwKICAgICAgICAgICAgICAgICAgICAgICAgInRpcHNfMTAwIiwgMzYgKiBwYXJhbXMkbnVtX3NhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0aXBzXzEwMDAiLCA2ICogcGFyYW1zJG51bV9zYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAidGlwc18xMCIsIDEgKiBwYXJhbXMkbnVtX3NhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICJwaDJvX21sIiwgMC4wNjEgKiBwYXJhbXMkbnVtX3NhbXBsZXMgKiBwYXJhbXMkcnhuX211bHRpcGxpZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAiZXRoYW5vbF91bCIsIDEyMDAgKiBwYXJhbXMkbnVtX3NhbXBsZXMgKiBwYXJhbXMkcnhuX211bHRpcGxpZXIpCgprYWJsZShtcm5hX2NhcHR1cmUpICU+JSAKICBrYWJsZV9zdHlsaW5nKCJib3JkZXJlZCIpCmBgYAoKCiMjIyAxLiB+flByZXBhcmUgbWFzdGVybWl4ZXMgZm9yIG51bWJlciBvZiBsaWJyYXJpZXMgKGluZGl2aWR1YWwgUk5BIGV4dHJhY3Rpb25zKX5+IERvbid0IHByZXBhcmUgcmVhZ2VudHMgdW50aWwgdGhlIHN0b3BwaW5nIHBvaW50IGJlZm9yZSB0aGV5IGFyZSBuZWVkZWQuICAKUmVhZ2VudHMgZXZhcG9yYXRlIGluIHRoZSBQQ1IgaG9vZCBhbmQgdGhpcyBwcm90b2NvbCB0YWtlcyBzZXZlcmFsIGhvdXJzLgoKCiMjIyAyLiBtUk5BIENhcHR1cmUKVGhpcyBwcm90b2NvbCByZXF1aXJlcyA1MCBuZyDigJMgMSDOvGcgb2YgaW50YWN0IHRvdGFsIFJOQSwgaW4gNTAgzrxMIG9mIFJOYXNlLWZyZWUgd2F0ZXIuIERlZ3JhZGVkIG9yIGZyYWdtZW50ZWQgdG90YWwgUk5BIHdpbGwgcmVzdWx0IGluIHNpZ25pZmljYW50IDMnLWJpYXMuClRoaXMgcHJvdG9jb2wgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGlzb2xhdGUgbWF0dXJlIG1STkEgZnJvbSB0b3RhbCBSTkEgdGhyb3VnaCB0d28gc3Vic2VxdWVudCBjYXB0dXJlIHN0ZXBzIHVzaW5nIG1STkEgQ2FwdHVyZSBCZWFkcy4gT3RoZXIgUk5BIG1vbGVjdWxlcyB3aXRoIGhvbW9wb2x5bWVyaWMgYWRlbm9zaW5lIHJlZ2lvbnMgbWF5IGFsc28gYmUgaXNvbGF0ZWQuClJOQSBzYW1wbGVzIHNob3VsZCBvbmx5IGJlIGtlcHQgb24gaWNlIHdoZXJlIHNwZWNpZmllZCBpbiB0aGlzIHByb3RvY29sLCBzaW5jZSBsb3cgdGVtcGVyYXR1cmVzIG1heSBwcm9tb3RlIG5vbi1zcGVjaWZpYyBjYXB0dXJlLCByZXN1bHRpbmcgaW4gaW5jcmVhc2VkIHJSTkEgbGV2ZWxzIGluIHRoZSBjYXB0dXJlZCBtUk5BLgpCZWZvcmUgc3RhcnRpbmcsIGVxdWlsaWJyYXRlIG1STkEgQ2FwdHVyZSBCZWFkcywgbVJOQSBCZWFkIEJpbmRpbmcgQnVmZmVyLCBtUk5BIEJlYWQgV2FzaCBCdWZmZXIgYW5kIEZyYWdtZW50LCBQcmltZSBhbmQgRWx1dGUgQnVmZmVyICgyWCkgdG8gcm9vbSB0ZW1wZXJhdHVyZS4KQmVmb3JlIHVzZSwgYmVhZHMgbXVzdCBiZSB3YXNoZWQgd2l0aCBtUk5BIEJlYWQgQmluZGluZyBCdWZmZXIgKHN0ZXBzIDIuMSDigJMgMi41KS4gIAoKIyMjIyAyLjEgICAKUmVzdXNwZW5kIHRoZSBtUk5BIENhcHR1cmUgQmVhZHMgdGhvcm91Z2hseSBieSBwaXBldHRpbmcgdXAgYW5kIGRvd24gZ2VudGx5LCBvciBieSB1c2luZyBhIHZvcnRleCBtaXhlciBvbiBhIGxvdyB0byBtZWRpdW0gc3BlZWQgc2V0dGluZyB0byBwcmV2ZW50IGZvYW1pbmcuIEhpZ2gtc3BlZWQgdm9ydGV4aW5nIG9yIHNoYWtpbmcgc2hvdWxkIGJlIGF2b2lkZWQgdG8gcHJldmVudCBmb2FtaW5nLiBSZWZlciB0byBJbXBvcnRhbnQgUGFyYW1ldGVyczogbVJOQSBDYXB0dXJlIEJlYWRzIChwLiA0KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIAoKIyMjIyAyLjIgICAKRm9yIGVhY2ggbGlicmFyeSB0byBiZSBwcmVwYXJlZCwgdHJhbnNmZXIgNTIuNSDOvEwgKDUwIM68TCArIDUlIGV4Y2Vzcykgb2YgdGhlIHJlc3VzcGVuZGVkIG1STkEgQ2FwdHVyZSBCZWFkcyBpbnRvIGFuIGFwcHJvcHJpYXRlIHR1YmUuIFdoZW4gcHJlcGFyaW5nIG11bHRpcGxlIGxpYnJhcmllcywgYmVhZHMgZm9yIHVwIHRvIDI0IGxpYnJhcmllcyAoMTI2MCDOvEwpIG1heSBiZSB3YXNoZWQgaW4gYSBzaW5nbGUgdHViZS4gV2hlbiBwcmVwYXJpbmcgbW9yZSB0aGFuIDI0IGxpYnJhcmllcywgd2FzaCBiZWFkcyBpbiBtdWx0aXBsZSBiYXRjaGVzLiBQbGVhc2UgcmVmZXIgdG8gSW1wb3J0YW50IFBhcmFtZXRlcnM6IG1STkEgQ2FwdHVyZSBCZWFkcyBmb3IgYWRkaXRpb25hbCByZWNvbW1lbmRhdGlvbnMgcmVnYXJkaW5nIGJ1bGsgYmVhZCB3YXNoaW5nLiAgCgojIyMjIDIuMyAgIApQbGFjZSB0aGUgdHViZSBvbiBhIG1hZ25ldCBhbmQgaW5jdWJhdGUgYXQgcm9vbSB0ZW1wZXJhdHVyZSB1bnRpbCB0aGUgc29sdXRpb24gaXMgY2xlYXIuIENhcmVmdWxseSByZW1vdmUgYW5kIGRpc2NhcmQgdGhlIHN1cGVybmF0YW50LCBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGVxdWFsIHZvbHVtZSBvZiBtUk5BIEJlYWQgQmluZGluZyBCdWZmZXIgKDUyLjUgzrxMIHBlciBsaWJyYXJ5KS4gIAoKIyMjIyAyLjQgICAKUmVtb3ZlIHRoZSB0dWJlIGZyb20gdGhlIG1hZ25ldCBhbmQgcmVzdXNwZW5kIHRoZSBiZWFkcyBieSBwaXBldHRpbmcgdXAgYW5kIGRvd24sIG9yIGJ5IGxvdyB0byBtZWRpdW0gc3BlZWQgdm9ydGV4aW5nLiBCZSBjYXJlZnVsIHRvIGF2b2lkIHByb2R1Y2luZyBleGNlc3NpdmUgZm9hbS4gIAoKIyMjIyAyLjUgICAKUGxhY2UgdGhlIHR1YmUgb24gdGhlIG1hZ25ldCBhbmQgaW5jdWJhdGUgYXQgcm9vbSB0ZW1wZXJhdHVyZSB1bnRpbCB0aGUgc29sdXRpb24gaXMgY2xlYXIuIENhcmVmdWxseSByZW1vdmUgYW5kIGRpc2NhcmQgdGhlIHN1cGVybmF0YW50LCBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGVxdWFsIHZvbHVtZSBvZiBtUk5BIEJlYWQgQmluZGluZyBCdWZmZXIgKDUyLjUgzrxMIHBlciBsaWJyYXJ5KS4gIAoKIyMjIyAyLjYgICAKUmVtb3ZlIHRoZSB0dWJlIGZyb20gdGhlIG1hZ25ldCBhbmQgcmVzdXNwZW5kIHRoZSBiZWFkcyBieSBwaXBldHRpbmcgdXAgYW5kIGRvd24sIG9yIGJ5IGxvdyB0byBtZWRpdW0gc3BlZWQgdm9ydGV4aW5nLiBCZSBjYXJlZnVsIHRvIGF2b2lkIHByb2R1Y2luZyBleGNlc3NpdmUgZm9hbS4gIAoKIyMjIyAyLjcgICAKRm9yIGVhY2ggUk5BIHNhbXBsZSB0byBiZSBjYXB0dXJlZCwgdHJhbnNmZXIgNTAgzrxMIG9mIHJlc3VzcGVuZGVkIG1STkEgQ2FwdHVyZSBCZWFkcyBpbnRvIGluZGl2aWR1YWwgdHViZXMgb3Igd2VsbHMgb2YgYSBwbGF0ZS4gIAoKIyMjIyAyLjggICAKVG8gZWFjaCB3ZWxsL3R1YmUsIGFkZCA1MCDOvEwgb2YgdGhlIGFwcHJvcHJpYXRlIFJOQSBzYW1wbGUgKGluIFJOYXNlLWZyZWUgd2F0ZXIpLiAgCgojIyMjIDIuOSAgIApNaXggdGhvcm91Z2hseSBieSBnZW50bHkgcGlwZXR0aW5nIHVwIGFuZCBkb3duIHNldmVyYWwgdGltZXMuICAKCiMjIyMgMi4xMCAgIAoKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgaW4gYSB0aGVybW9jeWNsZXIgYW5kIHBlcmZvcm0gdGhlIDFzdCBtUk5BIGNhcHR1cmUgYXMgZm9sbG93czogIAoKfFN0ZXB8VGVtcHxEdXJhdGlvbnwKfC0tLS18LS0tLXwtLS0tfAp8MXN0IG1STkEgY2FwdHVyZXw2NcuaQ3wyIG1pbnwKfENvb2x8MjDLmkN8NSBtaW58ICAgIAoKCiMjIyMgMi4xMSAgIApQbGFjZSB0aGUgcGxhdGUvdHViZShzKSBjb250YWluaW5nIHRoZSBtaXh0dXJlIG9mIG1STkEgQ2FwdHVyZSBCZWFkcyBhbmQgUk5BLCBvbiBhIG1hZ25ldCBhbmQgaW5jdWJhdGUgYXQgcm9vbSB0ZW1wZXJhdHVyZSB1bnRpbCB0aGUgc29sdXRpb24gaXMgY2xlYXIuIFJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgc3VwZXJuYXRhbnQuICAKCiMjIyMgMi4xMiAgIApSZW1vdmUgdGhlIHBsYXRlL3R1YmUocykgZnJvbSB0aGUgbWFnbmV0IGFuZCByZXN1c3BlbmQgdGhvcm91Z2hseSBpbiAyMDAgzrxMIG9mIG1STkEgQmVhZCBXYXNoIEJ1ZmZlciBieSBwaXBldHRpbmcgdXAgYW5kIGRvd24gc2V2ZXJhbCB0aW1lcy4gIAoKIyMjIyAyLjEzICAgClBsYWNlIHRoZSBwbGF0ZS90dWJlKHMpIG9uIHRoZSBtYWduZXQgYW5kIGluY3ViYXRlIGF0IHJvb20gdGVtcGVyYXR1cmUgdW50aWwgdGhlIHNvbHV0aW9uIGlzIGNsZWFyLiBSZW1vdmUgYW5kIGRpc2NhcmQgdGhlIHN1cGVybmF0YW50LiAgCgojIyMjIDIuMTQgICAKUmVzdXNwZW5kIHRoZSBiZWFkcyBpbiA1MCDOvEwgb2YgUk5hc2UtZnJlZSB3YXRlci4gIAoKIyMjIyAyLjE1ICAgClBsYWNlIHRoZSBwbGF0ZS90dWJlKHMpIGluIGEgdGhlcm1vY3ljbGVyIGFuZCBwZXJmb3JtIHRoZSAybmQgbVJOQSBjYXB0dXJlIGFzIGZvbGxvd3M6ICAgCgp8U3RlcHxUZW1wfER1cmF0aW9ufAp8LS0tLXwtLS0tfC0tLS18CnwybmQgbVJOQSBjYXB0dXJlfDcwy5pDfDIgbWlufAp8Q29vbHwyMMuaQ3w1IG1pbnwgICAgCgojIyMjIDIuMTYgICAKQWRkIDUwIM68TCBvZiBCZWFkIEJpbmRpbmcgQnVmZmVyIHRvIHRoZSBtaXh0dXJlIG9mIG1STkEgQ2FwdHVyZSBCZWFkcyBhbmQgUk5BLCBhbmQgbWl4IHRob3JvdWdobHkgYnkgZ2VudGx5IHBpcGV0dGluZyB1cCBhbmQgZG93biBzZXZlcmFsIHRpbWVzLiAgCgojIyMjIDIuMTcgICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgYXQgMjDCsEMgZm9yIDUgbWluLiAgCgojIyMjIDIuMTggICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gdGhlIG1hZ25ldCBhbmQgaW5jdWJhdGUgYXQgcm9vbSB0ZW1wZXJhdHVyZSB1bnRpbCB0aGUgc29sdXRpb24gaXMgY2xlYXIuIFJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgc3VwZXJuYXRhbnQuICAKCiMjIyMgMi4xOSAgIApSZW1vdmUgdGhlIGJlYWRzIGZyb20gdGhlIG1hZ25ldCBhbmQgcmVzdXNwZW5kIGluIDIwMCDOvEwgb2YgbVJOQSBCZWFkIFdhc2ggQnVmZmVyIGJ5IHBpcGV0dGluZyB1cCBhbmQgZG93biBzZXZlcmFsIHRpbWVzLiAgCgojIyMjIDIuMjAgIApQbGFjZSB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0IGFuZCBpbmN1YmF0ZSBhdCByb29tIHRlbXBlcmF0dXJlIHVudGlsIHRoZSBzb2x1dGlvbiBpcyBjbGVhci4gUmVtb3ZlIGFuZCBkaXNjYXJkIHRoZSBlbnRpcmUgdm9sdW1lIG9mIHN1cGVybmF0YW50LiAqKkNhdXRpb246IGNhcnJ5b3ZlciBvZiBtUk5BIEJlYWQgV2FzaCBCdWZmZXIgbWF5IGluaGliaXQgMXN0IHN0cmFuZCBjRE5BIHN5bnRoZXNpcy4qKiAgCgojIyMgMy4gbVJOQSBFbHV0aW9uLCBGcmFnbWVudGF0aW9uIGFuZCBQcmltaW5nICAKCiMjIyMgMy4xIApQcmVwYXJlIHRoZSByZXF1aXJlZCB2b2x1bWUgb2YgRnJhZ21lbnQsIFByaW1lIGFuZCBFbHV0ZSBCdWZmZXIgKDFYKSBhdCByb29tIHRlbXBlcmF0dXJlIGFzIGZvbGxvd3M6ICAKYGBge3J9CmthYmxlKHRyaWJibGUofkNvbXBvbmVudCwgflZvbHVtZSwKICAgICAgICJ1bCBSTmFzZS1mcmVlIHdhdGVyIiwgMTEsIAogICAgICAgInVsIEZyYWdtZW50LCBQcmltZSwgYW5kIEVsdXRlIEJ1ZmZlciAoMngpIiwgMTEpICU+JSAKICBtdXRhdGUoVm9sdW1lID0gVm9sdW1lICogcGFyYW1zJG51bV9zYW1wbGVzICogcGFyYW1zJHJ4bl9tdWx0aXBsaWVyKSkgJT4lIAogIGthYmxlX3N0eWxpbmcoImJvcmRlcmVkIikgCmBgYAojIyMjIDMuMiAgClRob3JvdWdobHkgcmVzdXNwZW5kIHRoZSBtUk5BIENhcHR1cmUgQmVhZHMgd2l0aCBjYXB0dXJlZCBtUk5BIHByZXBhcmVkIGluIHN0ZXAgMi4yMCBpbiAyMiDOvEwgb2YgRnJhZ21lbnQsIFByaW1lIGFuZCBFbHV0ZSBCdWZmZXIgKDFYKS4gIAoKIyBTQUZFIFNUT1BQSU5HIFBPSU5UIE9WRVJOSUdIVCBPTkxZClJlc3VzcGVuZGVkIGJlYWRzIHdpdGggY2FwdHVyZWQgbVJOQSBtYXkgYmUgc3RvcmVkIGF0IDTCsEMgZm9yIOKJpDI0IGhycy4gRG8gbm90IGZyZWV6ZSB0aGUgc2FtcGxlcyBhcyB0aGlzIHdpbGwgZGFtYWdlIHRoZSBiZWFkcy4gV2hlbiByZWFkeSwgcHJvY2VlZCB0byBzdGVwIDMuMy4gIAoKIyMgUHJlcCByZWFnZW50cyBmb3IgbmV4dCBzZXQgb2Ygc3RlcHM6CmBgYHtyfQpmaXJzdF9zdHJhbmQgPC0gdHJpYmJsZSh+aXRlbSwgfnZvbHVtZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bCBvZiAxc3Qgc3RyYW5kIHN5bnRoZXNpcyBidWZmZXIiLCAxMSwKICAgICAgICAgICAgICAgICAgICAgICAgInVsIG9mIEtBUEEgU2NyaXB0IiwgMSkgJT4lCiAgbXV0YXRlKHZvbHVtZSA9IHZvbHVtZSAqIHBhcmFtcyRudW1fc2FtcGxlcyAqIHBhcmFtcyRyeG5fbXVsdGlwbGllcikKCmthYmxlKGZpcnN0X3N0cmFuZCkgJT4lIAogIGthYmxlX3N0eWxpbmcoImJvcmRlcmVkIikgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIxc3QgU3RyYW5kIE1hc3RlciBNaXgiID0gMikpCgpgYGAKCmBgYHtyfQpzZWNvbmRfc3RyYW5kIDwtIHRyaWJibGUofml0ZW0sIH52b2x1bWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgInVsIDJuZCBTdHJhbmQgTWFya2luZyBCdWZmZXIiLCAzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCAybmQgU3RyYW5kIFN5bnRoZXNpcyBhbmQgQS10YWlsaW5nIGVuenltZSBtaXgiLCAyKSAlPiUKICBtdXRhdGUodm9sdW1lID0gdm9sdW1lICogcGFyYW1zJG51bV9zYW1wbGVzICogcGFyYW1zJHJ4bl9tdWx0aXBsaWVyKQoKa2FibGUoc2Vjb25kX3N0cmFuZCkgJT4lIAogIGthYmxlX3N0eWxpbmcoImJvcmRlcmVkIikgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIybmQgU3RyYW5kIGFuZCBBLXRhaWxpbmcgTWFzdGVyIE1peCIgPSAyKSkKYGBgCgpgYGB7cn0KYWRhcHRlcl9saWcgPC0gdHJpYmJsZSh+aXRlbSwgfnZvbHVtZSwgCiAgICAgICAgICAgICAgICAgICAgICAgInVsIExpZ2F0aW9uIEJ1ZmZlciIsIDQwLAogICAgICAgICAgICAgICAgICAgICAgICJ1bCBETkEgbGlnYXNlIiwgMTApICU+JQogIG11dGF0ZSh2b2x1bWUgPSB2b2x1bWUgKiBwYXJhbXMkbnVtX3NhbXBsZXMgKiBwYXJhbXMkcnhuX211bHRpcGxpZXIpCgprYWJsZShhZGFwdGVyX2xpZykgJT4lIAogIGthYmxlX3N0eWxpbmcoImJvcmRlcmVkIikgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJBZGFwdGVyIExpZ2F0aW9uIE1hc3RlciBNaXgiID0gMikpCmBgYApgYGB7cn0KYmVhZCA8LSB0cmliYmxlKH5pdGVtLCB+dm9sdW1lLCAKICAgICAgICAgICAgICAgICJ1bCBwb3N0LWxpZyBjbGVhbnVwIiwgNzAsCiAgICAgICAgICAgICAgICAidWwgTGlicmFyeSBBbXBsaWZpY2F0aW9uIGNsZWFudXAiLCA1MCkgJT4lCiAgbXV0YXRlKHZvbHVtZSA9IHZvbHVtZSAqIHBhcmFtcyRudW1fc2FtcGxlcyAqIHBhcmFtcyRyeG5fbXVsdGlwbGllcikgJT4lIAogIHN1bW1hcmlzZSh2b2x1bWUgPSBzdW0odm9sdW1lKSkKCmthYmxlKGJlYWQpICU+JSAKICBrYWJsZV9zdHlsaW5nKCJib3JkZXJlZCIpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygidWwgS2FwYSBwdXJlIGJlYWRzIG5lZWRlZCIgPSAxKSkKYGBgCmBgYHtyfQpldG9oIDwtIHRyaWJibGUofml0ZW0sIH52b2x1bWUsIAogICAgICAgICAgICAgICAgInVsIDFzdCBwb3N0LWxpZyBjbGVhbnVwIiwgNDAwLAogICAgICAgICAgICAgICAgInVsIDJuZCBwb3N0LWxpZyBjbGVhbnVwIiwgNDAwLAogICAgICAgICAgICAgICAgInVsIExpYnJhcnkgQW1wbGlmaWNhdGlvbiBjbGVhbnVwIiwgNDAwKSAlPiUKICBtdXRhdGUodm9sdW1lID0gdm9sdW1lICogcGFyYW1zJG51bV9zYW1wbGVzICogcGFyYW1zJHJ4bl9tdWx0aXBsaWVyKSAlPiUgCiAgc3VtbWFyaXNlKHZvbHVtZSA9IHN1bSh2b2x1bWUpLzEwMDApCgprYWJsZShldG9oKSAlPiUgCiAga2FibGVfc3R5bGluZygiYm9yZGVyZWQiKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIm1MIDgwJSBFdE9IIG5lZWRlZCIgPSAxKSkKYGBgCmBgYHtyfQplbHV0IDwtIHRyaWJibGUofml0ZW0sIH52b2x1bWUsIAogICAgICAgICAgICAgICAgInVsIDFzdCBwb3N0LWxpZyBjbGVhbnVwIiwgNTAsCiAgICAgICAgICAgICAgICAidWwgMm5kIHBvc3QtbGlnIGNsZWFudXAiLCAyMiwKICAgICAgICAgICAgICAgICJ1bCBMaWJyYXJ5IEFtcGxpZmljYXRpb24gY2xlYW51cCIsIDIyKSAlPiUKICBtdXRhdGUodm9sdW1lID0gdm9sdW1lICogcGFyYW1zJG51bV9zYW1wbGVzICogcGFyYW1zJHJ4bl9tdWx0aXBsaWVyKSAlPiUgCiAgc3VtbWFyaXNlKHZvbHVtZSA9IHN1bSh2b2x1bWUpKQoKa2FibGUoZWx1dCkgJT4lIAogIGthYmxlX3N0eWxpbmcoImJvcmRlcmVkIikgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJ1bCAxMG1NIFRyaXMtSENsIHBoIDguMC04LjUgRWx1dGlvbiBidWZmZXIgbmVlZGVkIiA9IDEpKQpgYGAKYGBge3J9ClBFRyA8LSB0cmliYmxlKH5pdGVtLCB+dm9sdW1lLCAKICAgICAgICAgICAgICAgInVsIDJuZCBwb3N0LWxpZyBjbGVhbnVwIiwgMzUpICU+JQogIG11dGF0ZSh2b2x1bWUgPSB2b2x1bWUgKiBwYXJhbXMkbnVtX3NhbXBsZXMgKiBwYXJhbXMkcnhuX211bHRpcGxpZXIpICU+JSAKICBzdW1tYXJpc2Uodm9sdW1lID0gc3VtKHZvbHVtZSkpCgprYWJsZShQRUcpICU+JSAKICBrYWJsZV9zdHlsaW5nKCJib3JkZXJlZCIpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygidWwgUEVHL05hQ2wgbmVlZGVkIiA9IDEpKQpgYGAKCiMjIyMgMy4zICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgaW4gYSB0aGVybW9jeWNsZXIgYW5kIGNhcnJ5IG91dCB0aGUgZnJhZ21lbnRhdGlvbiBhbmQgcHJpbWluZyBwcm9ncmFtIGdpdmVuIGluIHRoZSB0YWJsZSBiZWxvdzogIAoKfERlc2lyZWQgbWVhbiBsaWJyYXJ5IGluc2VydCBzaXplIChicCl8RnJhZ21lbnRhdGlvbnwKfC0tLS18LS0tLXwKfDEwMC0yMDB8OCBtaW4gYXQgOTTLmkN8CnwyMDAtMzAwfDYgbWluIGF0IDk0y5pDfAp8MzAwLTQwMHw2IG1pbiBhdCA4NcuaQ3wgIAoKIyMgV2UgYXJlIHNob290aW5nIGZvciBhIDM0Mi01NzIgaW5zZXJ0IHNpemUKCiMjIyMgMy40ICAKSW1tZWRpYXRlbHkgcGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gYSBtYWduZXQgdG8gY2FwdHVyZSB0aGUgYmVhZHMsIGFuZCBpbmN1YmF0ZSB1bnRpbCB0aGUgbGlxdWlkIGlzIGNsZWFyLiAqKkNhdXRpb246IHRvIHByZXZlbnQgaHlicmlkaXphdGlvbiBvZiBwb2x5KEEpLXJpY2ggUk5BIHRvIHRoZSBjYXB0dXJlIGJlYWRzLCBkbyBub3QgYWxsb3cgdGhlIHNhbXBsZSB0byBjb29sIGJlZm9yZSBwbGFjaW5nIG9uIHRoZSBtYWduZXQuKiogIAoKIyMjIyAzLjUgIApDYXJlZnVsbHkgcmVtb3ZlIDIwzrxMIG9mIHRoZSBzdXBlcm5hdGFudCBjb250YWluaW5nIHRoZSBlbHV0ZWQsIGZyYWdtZW50ZWQsIGFuZCBwcmltZWQgUk5BIGludG8gYSBzZXBhcmF0ZSBwbGF0ZSBvciB0dWJlLiAgCgojIyMjIDMuNiAgClBsYWNlIHRoZSBwbGF0ZS90dWJlKHMpIG9uIGljZSBhbmQgcHJvY2VlZCBpbW1lZGlhdGVseSB0byAxc3QgU3RyYW5kIFN5bnRoZXNpcyAoc3RlcCA0KS4gIAoKIyMjIDQuIDFzdCBTdHJhbmQgU3ludGhlc2lzCgojIyMjIDQuMSAgCk9uIGljZSwgYXNzZW1ibGUgdGhlIDFzdCBzdHJhbmQgc3ludGhlc2lzIHJlYWN0aW9uIGFzIGZvbGxvd3M6ICAKCnxDb21wb25lbnR8Vm9sdW1lfAp8LS0tLXwtLS0tfAp8RnJhZ21lbnRlZCwgcHJpbWVkIFJOQSBlbHV0ZWQgZnJvbSBiZWFkc3wyMCB1bHwKfDFzdCBzdHJhbmQgc3ludGhlc2lzIG1hc3RlciBtaXggKFRhYmxlIDIpfDEwIHVsfAp8KipUb3RhbCBWb2x1bWUqKnwqKjMwIHVsKip8ICAKCiMjIyMgNC4yICAKS2VlcGluZyB0aGUgcGxhdGUvdHViZShzKSBvbiBpY2UsIG1peCB0aG9yb3VnaGx5IGJ5IGdlbnRseSBwaXBldHRpbmcgdGhlIHJlYWN0aW9uIHVwIGFuZCBkb3duIHNldmVyYWwgdGltZXMuICAKCiMjIyMgNC4zICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgdXNpbmcgdGhlIGZvbGxvd2luZyBwcm90b2NvbDogIAoKfFN0ZXB8VGVtcHxEdXJhdGlvbnwKfC0tLS18LS0tLXwtLS0tfAp8UHJpbWVyIEV4dGVuc2lvbnwyNcuaQ3wxMCBtaW58Cnwxc3QgU3RyYW5kIFN5bnRoZXNpc3w0MsuaQ3wxNSBtaW58CnxFbnp5bWUgaW5hY3RpdmF0aW9ufDcwy5pDfDE1IG1pbnwKfEhPTER8NMuaQ3ziiJ58ICAKCiMjIyMgNC40ICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gaWNlIGFuZCBwcm9jZWVkIGltbWVkaWF0ZWx5IHRvIDJuZCBTdHJhbmQgU3ludGhlc2lzIGFuZCBBLXRhaWxpbmcgKHN0ZXAgNSkuICAKCiMjIyA1LiAybmQgU3RyYW5kIFN5bnRoZXNpcyBhbmQgQS10YWlsaW5nICAKCiMjIyMgNS4xICAgCgpPbiBpY2UsIGFzc2VtYmxlIHRoZSAybmQgc3RyYW5kIHN5bnRoZXNpcyBhbmQgQS10YWlsaW5nIHJlYWN0aW9uIGFzIGZvbGxvd3M6ICAKCnxDb21wb25lbnR8Vm9sdW1lfAp8LS0tLXwtLS0tfAp8MXN0IHN0cmFuZCBzeW50aGVzaXMgcHJvZHVjdHwzMCB1THwKfDJuZCBzdHJhbmQgc3ludGhlc2lzIGFuZCBBLXRhaWxpbmcgbWFzdGVyIG1peCAoVGFibGUgMyl8MzAgdUx8CnwqKlRvdGFsIFZvbHVtZSoqfCoqNjAgdWwqKnwgIAoKIyMjIyA1LjIgIApLZWVwaW5nIHRoZSBwbGF0ZS90dWJlKHMpIG9uIGljZSwgbWl4IHRob3JvdWdobHkgYnkgZ2VudGx5IHBpcGV0dGluZyB0aGUgcmVhY3Rpb24gdXAgYW5kIGRvd24gc2V2ZXJhbCB0aW1lcy4gIAoKIyMjIyA1LjMgICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgdXNpbmcgdGhlIGZvbGxvd2luZyBwcm90b2NvbDogIAoKfFN0ZXB8VGVtcHxEdXJhdGlvbnwKfC0tLS18LS0tLXwtLS0tfAp8Mm5kIFN0cmFuZCBTeW50aGVzaXN8MTbLmkN8MzAgbWlufAp8QS1UYWlsaW5nfDYyy5pDfDEwIG1pbnwKfEhPTER8NMuaQ3ziiJ58ICAgCgojIyMjIDUuNCAgClBsYWNlIHRoZSBwbGF0ZS90dWJlKHMpIG9uIGljZSBhbmQgcHJvY2VlZCBpbW1lZGlhdGVseSB0byBBZGFwdGVyIExpZ2F0aW9uIChzdGVwIDYpLiAgCgojIyMgNi4gQWRhcHRlciBMaWdhdGlvbiAgCgojIyMjIDYuMSAKRGlsdXRlIGFkYXB0ZXJzIGluIHByZXBhcmF0aW9uIGZvciBsaWdhdGlvbiwgdGFyZ2V0aW5nIHRoZSBmb2xsb3dpbmcgY29uY2VudHJhdGlvbnM6ICAKCnxRdWFudGl0eSBvZiBzdGFydGluZyBtYXRlcmlhbHxBZGFwdGVyIHN0b2NrIGNvbmNlbnRyYXRpb258CnwtLS0tfC0tLS18Cnw1MCDigJMgNDk5IG5nfDEuNSB1TXwKfDUwMCDigJMgMTAwMCBuZ3w3IM68TXwgIAoKIyMjIyA2LjIgIApPbiBpY2UsIHNldCB1cCB0aGUgYWRhcHRlciBsaWdhdGlvbiByZWFjdGlvbiBhcyBmb2xsb3dzOiAgCgp8Q29tcG9uZW50fFZvbHVtZXwKfC0tLS18LS0tLXwKfDJuZCBzdHJhbmQgc3ludGhlc2lzIHByb2R1Y3R8NjAgzrxMfAp8QWRhcHRlciBsaWdhdGlvbiBtYXN0ZXIgbWl4IChUYWJsZSA0KXw0NSDOvEx8CnxEaWx1dGVkIGFkYXB0ZXIgc3RvY2t8NSDOvEx8CnwqKlRvdGFsIHZvbHVtZToqKnwqKjExMCDOvEwqKnwgIAoKIyMjIyA2LjMgIApLZWVwaW5nIHRoZSBwbGF0ZS90dWJlKHMpIG9uIGljZSwgbWl4IHRob3JvdWdobHkgYnkgcGlwZXR0aW5nIHRoZSByZWFjdGlvbiB1cCBhbmQgZG93biBzZXZlcmFsIHRpbWVzLiAgCgojIyMjIDYuNCAgCkluY3ViYXRlIHRoZSBwbGF0ZS90dWJlKHMpIGF0IDIwwrBDIGZvciAxNSBtaW4uICAKCiMjIyMgNi41ICAKUHJvY2VlZCBpbW1lZGlhdGVseSB0byAxc3QgUG9zdC1saWdhdGlvbiBDbGVhbnVwIChzdGVwIDcpLgoKIyMjIDcuIEZpcnN0IFBvc3QtbGlnYXRpb24gQ2xlYW51cCAgCgojIyMjIDcuMSAgClBlcmZvcm0gYSAwLjYzWCBiZWFkLWJhc2VkIGNsZWFudXAgYnkgY29tYmluaW5nIHRoZSBmb2xsb3dpbmc6ICAKCnxDb21wb25lbnR8Vm9sdW1lfAp8LS0tLXwtLS0tfAp8QWRhcHRlci1saWdhdGVkIEROQXwxMTAgzrxMfAp8S0FQQSBQdXJlIEJlYWRzfDcwIM68THwKfCoqVG90YWwgdm9sdW1lOioqfCoqMTgwIM68TCoqfCAgCgojIyMjIDcuMiAgCk1peCB0aG9yb3VnaGx5IGJ5IHZvcnRleGluZyBhbmQvb3IgcGlwZXR0aW5nIHVwIGFuZCBkb3duIG11bHRpcGxlIHRpbWVzLiAgCgojIyMjIDcuMyAgCkluY3ViYXRlIHRoZSBwbGF0ZS90dWJlKHMpIGF0IHJvb20gdGVtcGVyYXR1cmUgZm9yIDUg4oCTIDE1IG1pbiB0byBiaW5kIEROQSB0byB0aGUgYmVhZHMuICAKCiMjIyMgNy40ICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gYSBtYWduZXQgdG8gY2FwdHVyZSB0aGUgYmVhZHMuIEluY3ViYXRlIHVudGlsIHRoZSBsaXF1aWQgaXMgY2xlYXIuICAKCiMjIyMgNy41ICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCAxNzUgzrxMIG9mIHN1cGVybmF0YW50LiAgCgojIyMjIDcuNiAgCktlZXBpbmcgdGhlIHBsYXRlL3R1YmUocykgb24gdGhlIG1hZ25ldCwgYWRkIDIwMCDOvEwgb2YgODAlIGV0aGFub2wuICAKCiMjIyMgNy43ICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgb24gdGhlIG1hZ25ldCBhdCByb29tIHRlbXBlcmF0dXJlIGZvciDiiaUzMCBzZWMuICAKCiMjIyMgNy44ICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgZXRoYW5vbC4gIAoKIyMjIyA3LjkgIApLZWVwaW5nIHRoZSBwbGF0ZS90dWJlKHMpIG9uIHRoZSBtYWduZXQsIGFkZCAyMDAgzrxMIG9mIDgwJSBldGhhbm9sLiAgCgojIyMjIDcuMTAgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0IGF0IHJvb20gdGVtcGVyYXR1cmUgZm9yIOKJpTMwIHNlYy4gIAoKIyMjIyA3LjExICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgZXRoYW5vbC4gVHJ5IHRvIHJlbW92ZSBhbGwgcmVzaWR1YWwgZXRoYW5vbCB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGJlYWRzLiAgCgojIyMjIDcuMTIgICAKRHJ5IHRoZSBiZWFkcyBhdCByb29tIHRlbXBlcmF0dXJlIGZvciAzIOKAkyA1IG1pbiwgb3IgdW50aWwgYWxsIG9mIHRoZSBldGhhbm9sIGhhcyBldmFwb3JhdGVkLiAqKkNhdXRpb246IG92ZXItZHJ5aW5nIHRoZSBiZWFkcyBtYXkgcmVzdWx0IGluIHJlZHVjZWQgeWllbGQuKiogIAoKIyMjIyA3LjEzICAKUmVtb3ZlIHRoZSBwbGF0ZS90dWJlKHMpIGZyb20gdGhlIG1hZ25ldC4gIAoKIyMjIyA3LjE0ICAKVGhvcm91Z2hseSByZXN1c3BlbmQgdGhlIGJlYWRzIGluIDUwIM68TCBvZiAxMCBtTSBUcmlzLUhDbCAocEggOC4wIOKAkyA4LjUpLiAgCgojIyMjIDcuMTUgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBhdCByb29tIHRlbXBlcmF0dXJlIGZvciAyIG1pbiB0byBlbHV0ZSBETkEgb2ZmIHRoZSBiZWFkcy4gIAoKIyBTQUZFIFNUT1BQSU5HIFBPSU5UIE9WRVJOSUdIVCBPTkxZClRoZSBzb2x1dGlvbiB3aXRoIHJlc3VzcGVuZGVkIGJlYWRzIGNhbiBiZSBzdG9yZWQgYXQgNMKwQyBmb3Ig4omkMjQgaHJzLiBEbyBub3QgZnJlZXplIHRoZSBiZWFkcywgYXMgdGhpcyBjYW4gcmVzdWx0IGluIGRyYW1hdGljIGxvc3Mgb2YgRE5BLiBXaGVuIHJlYWR5LCBwcm9jZWVkIHRvIDJuZCBQb3N0LWxpZ2F0aW9uIENsZWFudXAgKHN0ZXAgOCkuCgojIyBQcmVwIHRoZSByZW1haW5pbmcgcmVhZ2VudHMgbmVlZGVkIGZvciBuZXh0IHN0ZXBzLCBtYWtlIGZyZXNoIEV0T0ggZXZlcnkgZGF5IG9mIHByb3RvY29sLgoKYGBge3J9CmxpYnJhcnlfYW1wIDwtIHRyaWJibGUofml0ZW0sIH52b2x1bWUsIAogICAgICAgICAgICAgICAgICAgICAgICJ1bCBIaUZpIEhvdFN0YXJ0IFJlYWR5TWl4IiwgMjUsCiAgICAgICAgICAgICAgICAgICAgICAgInVsIExpYnJhcnkgQW1wbGlmaWNhdGlvbiBQcmltZXIgTWl4IiwgNSkgJT4lCiAgbXV0YXRlKHZvbHVtZSA9IHZvbHVtZSAqIHBhcmFtcyRudW1fc2FtcGxlcyAqIHBhcmFtcyRyeG5fbXVsdGlwbGllcikKCmthYmxlKGxpYnJhcnlfYW1wKSAlPiUgCiAga2FibGVfc3R5bGluZygiYm9yZGVyZWQiKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxpYnJhcnkgQW1wbGlmaWNhdGlvbiBNYXN0ZXIgTWl4IiA9IDIpKQpgYGAKCiMjIyA4LiAybmQgUG9zdC1saWdhdGlvbiBDbGVhbnVwICAKCiMjIyMgOC4xICAKUGVyZm9ybSBhIDAuN1ggYmVhZC1iYXNlZCBjbGVhbnVwIGJ5IGNvbWJpbmluZyB0aGUgZm9sbG93aW5nOiAgCgp8Q29tcG9uZW50fFZvbHVtZXwKfC0tLS18LS0tLXwKfEJlYWRzIHdpdGggcHVyaWZpZWQsIGFkYXB0ZXItbGlnYXRlZCBETkF8NTAgzrxMfAp8UEVHL05hQ2wgU29sdXRpb258MzUgzrxMfAp8KipUb3RhbCB2b2x1bWU6Kip8Kio4NSDOvEwqKnwgIAoKIyMjIyA4LjIgIApNaXggdGhvcm91Z2hseSBieSB2b3J0ZXhpbmcgYW5kL29yIHBpcGV0dGluZyB1cCBhbmQgZG93biBtdWx0aXBsZSB0aW1lcy4gIAoKIyMjIyA4LjMgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBhdCByb29tIHRlbXBlcmF0dXJlIGZvciA1IOKAkyAxNSBtaW4gdG8gYmluZCBETkEgdG8gdGhlIGJlYWRzLiAgCgojIyMjIDguNCAgClBsYWNlIHRoZSBwbGF0ZS90dWJlKHMpIG9uIGEgbWFnbmV0IHRvIGNhcHR1cmUgdGhlIGJlYWRzLiBJbmN1YmF0ZSB1bnRpbCB0aGUgbGlxdWlkIGlzIGNsZWFyLiAgCgojIyMjIDguNQpDYXJlZnVsbHkgcmVtb3ZlIGFuZCBkaXNjYXJkIDgwIM68TCBvZiBzdXBlcm5hdGFudC4gIAoKIyMjIyA4LjYgICAKS2VlcGluZyB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0LCBhZGQgMjAwIM68TCBvZiA4MCUgZXRoYW5vbC4gIAoKIyMjIyA4LjcgICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgb24gdGhlIG1hZ25ldCBhdCByb29tIHRlbXBlcmF0dXJlIGZvciDiiaUzMCBzZWMuICAKCiMjIyMgOC44ICAgCkNhcmVmdWxseSByZW1vdmUgYW5kIGRpc2NhcmQgdGhlIGV0aGFub2wuICAKCiMjIyMgOC45ICAgCktlZXBpbmcgdGhlIHBsYXRlL3R1YmUocykgb24gdGhlIG1hZ25ldCwgYWRkIDIwMCDOvEwgb2YgODAlIGV0aGFub2wuICAKCiMjIyMgOC4xMCAgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0IGF0IHJvb20gdGVtcGVyYXR1cmUgZm9yIOKJpTMwIHNlYy4gIAoKIyMjIyA4LjExICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgZXRoYW5vbC4gVHJ5IHRvIHJlbW92ZSBhbGwgcmVzaWR1YWwgZXRoYW5vbCB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGJlYWRzLiAgCgojIyMjIDguMTIgIApEcnkgdGhlIGJlYWRzIGF0IHJvb20gdGVtcGVyYXR1cmUgZm9yIDMg4oCTIDUgbWluLCBvciB1bnRpbCBhbGwgb2YgdGhlIGV0aGFub2wgaGFzIGV2YXBvcmF0ZWQuIENhdXRpb246IG92ZXItZHJ5aW5nIHRoZSBiZWFkcyBtYXkgcmVzdWx0IGluIHJlZHVjZWQgeWllbGQuICAKCiMjIyMgOC4xMyAgClJlbW92ZSB0aGUgcGxhdGUvdHViZShzKSBmcm9tIHRoZSBtYWduZXQuICAKCiMjIyMgOC4xNCAgClRob3JvdWdobHkgcmVzdXNwZW5kIHRoZSBiZWFkcyBpbiAyMs68TCBvZiAxMCBtTSBUcmlzLUhDbCAocEggOC4wIOKAkyA4LjUpLiAgCgojIyMjIDguMTUgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBhdCByb29tIHRlbXBlcmF0dXJlIGZvciAyIG1pbiB0byBlbHV0ZSBETkEgb2ZmIHRoZSBiZWFkcy4gIAoKIyMjIyA4LjE2ICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gYSBtYWduZXQgdG8gY2FwdHVyZSB0aGUgYmVhZHMuIEluY3ViYXRlIHVudGlsIHRoZSBsaXF1aWQgaXMgY2xlYXIuICAKCiMjIyMgOC4xNyAgClRyYW5zZmVyIDIwIM68TCBvZiB0aGUgY2xlYXIgc3VwZXJuYXRhbnQgdG8gYSBuZXcgcGxhdGUvdHViZShzKSBhbmQgcHJvY2VlZCB0byBMaWJyYXJ5IEFtcGxpZmljYXRpb24gKHN0ZXAgOSkuICAKCiMgU0FGRSBTVE9QUElORyBQT0lOVApUaGUgcHVyaWZpZWQsIGFkYXB0ZXItbGlnYXRlZCBsaWJyYXJ5IEROQSBtYXkgYmUgc3RvcmVkIGF0IDTCsEMgZm9yIOKJpDEgd2Vlaywgb3IgZnJvemVuIGF0IC0yMMKwQyBmb3Ig4omkMSBtb250aC4gV2hlbiByZWFkeSwgcHJvY2VlZCB0byBMaWJyYXJ5IEFtcGxpZmljYXRpb24gKHN0ZXAgOSkuICAKCiMjIyA5LiBMaWJyYXJ5IEFtcGxpZmljYXRpb24gIAoKIyMjIyA5LjEgIApBc3NlbWJsZSBlYWNoIGxpYnJhcnkgYW1wbGlmaWNhdGlvbiByZWFjdGlvbiBhcyBmb2xsb3dzOiAgCgp8Q29tcG9uZW50fFZvbHVtZXwKfC0tLS18LS0tLXwKfFB1cmlmaWVkLCBhZGFwdGVyLWxpZ2F0ZWQgRE5BfDIwIM68THwKfExpYnJhcnkgYW1wbGlmaWNhdGlvbiBtYXN0ZXIgbWl4IChUYWJsZSA1KXwzMCDOvEx8CnwqKlRvdGFsIHZvbHVtZToqKnwqKjUwIM68TCoqfCAgCgojIyMjIDkuMiAgIApNaXggd2VsbCBieSBwaXBldHRpbmcgdXAgYW5kIGRvd24gc2V2ZXJhbCB0aW1lcy4gIAoKIyMjIyA5LjMgIApBbXBsaWZ5IHRoZSBsaWJyYXJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgdGhlcm1vY3ljbGluZyBwcm9maWxlOiAgCgp8U3RlcHxUZW1wLnxEdXJhdGlvbnxDeWNsZXN8CnwtLS0tfC0tLS18LS0tLXwtLS0tfAp8SW5pdGlhbCBkZW5hdHVyYXRpb258IDk4wrBDfDQ1IHNlYyB8MXwgCnxEZW5hdHVyYXRpb24gfDk4wrBDfDE1IHNlY3xSZWZlciB0byBUYWJsZSAxfAp8QW5uZWFsaW5nKnwgNjDCsEN8MzAgc2VjfFJlZmVyIHRvIFRhYmxlIDF8CnxFeHRlbnNpb258IDcywrBDfDMwIHNlY3xSZWZlciB0byBUYWJsZSAxfAp8RmluYWwgRXh0ZW5zaW9ufCA3MsKwQ3wxIG1pbnwxfAp8SE9MRHwgNMKwQ3ziiJ58MXwgIAoKKipUYWJsZSAxKioKCnxRdWFudGl0eSBvZiBzdGFydGluZyBtYXRlcmlhbHxOdW1iZXIgb2YgY3ljbGVzfAp8LS0tLXwtLS0tfAp8NTAg4oCTIDEwMCBuZ3wxMyDigJMgMTZ8CnwxMDEg4oCTIDI1MCBuZ3wxMSDigJMgMTR8CnwyNTEg4oCTIDUwMCBuZ3w5IOKAkyAxMnwgCnw1MDEg4oCTIDEwMDAgbmd8NyDigJMgMTB8ICAKCiMjIyMgOS40ICAKUHJvY2VlZCBpbW1lZGlhdGVseSB0byBMaWJyYXJ5IEFtcGxpZmljYXRpb24gQ2xlYW51cCAoc3RlcCAxMCkuICAKCiMjIyAxMC4gTGlicmFyeSBBbXBsaWZpY2F0aW9uIENsZWFudXAgIAoKIyMjIyAxMC4xICAgClBlcmZvcm0gYSAxWCBiZWFkLWJhc2VkIGNsZWFudXAgYnkgY29tYmluaW5nIHRoZSBmb2xsb3dpbmc6ICAKCnxDb21wb25lbnR8Vm9sdW1lfAp8LS0tLXwtLS0tfAp8QWRhcHRlci1saWdhdGVkIEROQXw1MCDOvEx8CnxLQVBBIFB1cmUgQmVhZHN8NTAgzrxMfAp8KipUb3RhbCB2b2x1bWU6Kip8KioxMDAgzrxMKip8CgojIyMjIDEwLjIgIApNaXggdGhvcm91Z2hseSBieSB2b3J0ZXhpbmcgYW5kL29yIHBpcGV0dGluZyB1cCBhbmQgZG93biBtdWx0aXBsZSB0aW1lcy4gIAoKIyMjIyAxMC4zICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgYXQgcm9vbSB0ZW1wZXJhdHVyZSBmb3IgNSDigJMgMTUgbWluIHRvIGJpbmQgRE5BIHRvIHRoZSBiZWFkcy4gIAoKIyMjIyAxMC40ICAKUGxhY2UgdGhlIHBsYXRlL3R1YmUocykgb24gYSBtYWduZXQgdG8gY2FwdHVyZSB0aGUgYmVhZHMuIEluY3ViYXRlIHVudGlsIHRoZSBsaXF1aWQgaXMgY2xlYXIuICAKCiMjIyMgMTAuNSAgCkNhcmVmdWxseSByZW1vdmUgYW5kIGRpc2NhcmQgOTUgzrxMIG9mIHN1cGVybmF0YW50LiAgCgojIyMjIDEwLjYgIApLZWVwaW5nIHRoZSBwbGF0ZS90dWJlKHMpIG9uIHRoZSBtYWduZXQsIGFkZCAyMDAgzrxMIG9mIDgwJSBldGhhbm9sLiAgCgojIyMjIDEwLjcgIApJbmN1YmF0ZSB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0IGF0IHJvb20gdGVtcGVyYXR1cmUgZm9yIOKJpTMwIHNlYy4gIAoKIyMjIyAxMC44ICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgZXRoYW5vbC4gIAoKIyMjIyAxMC45ICAKS2VlcGluZyB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0LCBhZGQgMjAwIM68TCBvZiA4MCUgZXRoYW5vbC4gIAoKIyMjIyAxMC4xMCAgCkluY3ViYXRlIHRoZSBwbGF0ZS90dWJlKHMpIG9uIHRoZSBtYWduZXQgYXQgcm9vbSB0ZW1wZXJhdHVyZSBmb3Ig4omlMzAgc2VjLiAgCgojIyMjIDEwLjExICAKQ2FyZWZ1bGx5IHJlbW92ZSBhbmQgZGlzY2FyZCB0aGUgZXRoYW5vbC4gVHJ5IHRvIHJlbW92ZSBhbGwgcmVzaWR1YWwgZXRoYW5vbCB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGJlYWRzLiAgCgojIyMjIDEwLjEyICAKRHJ5IHRoZSBiZWFkcyBhdCByb29tIHRlbXBlcmF0dXJlIGZvciAzIOKAkyA1IG1pbiwgb3IgdW50aWwgYWxsIG9mIHRoZSBldGhhbm9sIGhhcyBldmFwb3JhdGVkLiBDYXV0aW9uOiBvdmVyLWRyeWluZyB0aGUgYmVhZHMgbWF5IHJlc3VsdCBpbiByZWR1Y2VkIHlpZWxkLiAgCgojIyMjIDEwLjEzICAKVGhvcm91Z2hseSByZXN1c3BlbmQgdGhlIGRyaWVkIGJlYWRzIGluIDIyIM68TCBvZiAxMCBtTSBUcmlzLUhDbCAocEggOC4wIOKAkyA4LjUpLiAgCgojIyMjIDEwLjE0ICAKSW5jdWJhdGUgdGhlIHBsYXRlL3R1YmUocykgYXQgcm9vbSB0ZW1wZXJhdHVyZSBmb3IgMiBtaW4gdG8gZWx1dGUgRE5BIG9mZiB0aGUgYmVhZHMuICAKCiMjIyMgMTAuMTUgIApQbGFjZSB0aGUgcGxhdGUvdHViZShzKSBvbiB0aGUgbWFnbmV0IHRvIGNhcHR1cmUgdGhlIGJlYWRzLiBJbmN1YmF0ZSB1bnRpbCB0aGUgbGlxdWlkIGlzIGNsZWFyLiAgCgojIyMjIDEwLjE2ICAKVHJhbnNmZXIgMjAgzrxMIG9mIHRoZSBjbGVhciBzdXBlcm5hdGFudCB0byBhIG5ldyBwbGF0ZS90dWJlKHMpLCBhbmQgc3RvcmUgdGhlIHB1cmlmaWVkLCBhbXBsaWZpZWQgbGlicmFyaWVzIGF0IDTCsEMgZm9yIOKJpCAxIHdlZWsgb3IgYXQgLTIwwrBDLiAgCgoK