1 Introduction

The following document shows the results of the analysis of a horizontal well in an unconventional field located in the USA.

The Production Forecast Model was used to analyze the well.

The objective of the analysis is to determine the remaining reserves of the well up to a technical limit.

The remaining reserves is defined as Developed Producing Reserves (DPR)

The technical limit is defined as the production rate of the well at the end of the forecast production time.

2 Overview Production Forecast Model

The purpose of the production forecasting model is to estimate the proven reserves of an oil-producing field.

Initially, the Production Forecast Model uses production data from wells or the field, and from there, the system generates an analytical function with the best possible fit of production history. This function is later used to forecast well or field production.

In addition to the production data, the system uses as input, a parameter that is related to the daily production rate at the technical limit. This parameter is expressed in units of time and is used in order to determine the production forecast.

Conceptually, the technical limit could be established in at least two different ways: 1) by the owner or operator of the field or another option, 2) it is to use the production profile generated by the system to carry out an economic evaluation, so that the Cash Flow analysis allows estimating the economic limit.

Finally, the forecast results are considered to represent the Developed Producing Reserves.

The PRMS system uses a sub-classification of the project reserves. Specifically, proven reserves are called On Production and is self-evident in that the project must be producing and selling petroleum to market as at the effective date of the evaluation.

3 Well WB4h - Production data

3.1 Variables and units

  • q: daily oil production, unit: standard barrels of oil per days (stb/d)
  • Q: cumulative oil production, units: thousand standard barrels of oil (mstb)
  • Time: days

4 Well WB4h - Model Results

4.1 Variables and units

  • Q: cumulative oil production, units: stb
  • Qf: forecast cumulative oil production, units: stb
  • Time: days

5 Well WB4h - Model Forecast

5.1 Cumulative oil production

  • Q: cumulative oil production, units: stb
  • Qf: forecast cumulative oil production, units: stb
  • Time: years

5.2 Daily oil production

  • q: daily oil production, units: stb
  • qf: forecast daily oil production, units: stb
  • Time: years

6 Well WB4h summary

Forecast Production Model - WB4h well Results
Date.actual Years.actual Q Year.f Qf DPR qe
2019-10-15 6 79045 3 90698 11653 10
Note:

Date.actual: production date
Years.actual: production years
Q: actual cumulative oil production, units: stb
Year.f: forecast years
Qf: forecast cumulative oil production, units: stb
DPR: Developed Producing Reserves, units: stb
qe: daily oil production at forecast years, units:stb/d
stb: standard barrel of oil

7 Reference

Guidelines for Application of the Petroleum Resources Management System. (2011).

Houston, Texas: Society of Petroleum Evaluation Engineers, American Association of Petroleum Geologists, World Petroleum Council, Society of Petroleum Evaluation Engineers and Society of Exploration Geophysicists.

LS0tCnRpdGxlOiAiUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCAtIEhvcml6b250YWwgV2VsbCBDYXNlIgphdXRob3I6ICJFdWxlckVuZXJneUBnbWFpbC5jb20iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0aGVtZTogc2ltcGxleAogICAgY3NzOiB+L0RvY3VtZW50cy9SL0ZDSC9zY3JpcHQvc3R5bGUuY3NzCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBybShsaXN0ID0gbHMoKSkKc3RhcnRfdGltZSA8LSBTeXMudGltZSgpCiMgbG9hZCBsaWJyYXJpZXMKbGlicmFyeSgicmVhZHhsIikKbGlicmFyeSgicG5nIikKbGlicmFyeSgidGlkeXZlcnNlIikKbGlicmFyeSgibmxzLm11bHRzdGFydCIpCmxpYnJhcnkoImhyYnJ0aGVtZXMiKQpsaWJyYXJ5KCJicm9vbSIpCmxpYnJhcnkoInZpcmlkaXMiKQpsaWJyYXJ5KCJ2aXJpZGlzTGl0ZSIpCmxpYnJhcnkoInRyZWVtYXAiKQpsaWJyYXJ5KCJmbGV4ZGFzaGJvYXJkIikKbGlicmFyeSgibHVicmlkYXRlIikKbGlicmFyeSgia2FibGVFeHRyYSIpCgojIGRlZmluZSB0aGVtZV9zZXQgb2JqZWN0CnRoZW1lX3NldChocmJydGhlbWVzOjp0aGVtZV9pcHN1bSgKICBiYXNlX3NpemUgPSAyMCwKICBheGlzX3RpdGxlX3NpemUgPSAyMCwgCiAgYXhpc190aXRsZV9mYWNlID0gImJvbGQiLAogIGNhcHRpb25fc2l6ZSA9IDE2KSkKCiMgaHR0cHM6Ly9odG1sY29sb3Jjb2Rlcy5jb20KCmNvbG91cl91c2VkIDwtIHRpYmJsZSgKICB2YXIgPSBjKCJtYmQgZGF0byIsICJtbWIgZGF0byIsICJtYmQgbW9kZWxvIiwgIm1tYiBtb2RlbG8iKSwgCiAgbmFtZSA9IGMoImF6dWwiLCAicm9qbyIsICJ2ZXJkZSIsICJuYXJhbmphIiksCiAgY29sb3VyID0gYygiIzY1OGVkNCIsICIjRTgzQzE3IiwgIiM4MUM0MDgiLCAiI0ZGQzMwMCIpKQoKc291cmNlKCJ+L0RvY3VtZW50cy9SL2ZhL1IvZnVuY3Rpb25zX0ZBX25vdGVib29rLlIiKQpkaWdpdCA9IDEKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMnIEEgcHJpbnRfdGFibGUgZnVuY3Rpb24KIycgQGtleXdvcmRzIHByaW50X3RhYmxlCiMnIEBrZXl3b3JkcyBjYXB0aW9uCiMnIEBrZXl3b3JkcyBkaWdpdAojJyBAa2V5d29yZHMgbm90ZXMKIycgQGV4cG9ydAojJwoKcHJpbnRfdGFibGUgPC0gZnVuY3Rpb24ocHJpbnRfdGFibGUsIGNhcHRpb24sIGRpZ2l0LCBub3RlcykKewogIHByaW50X3RhYmxlICU+JQogICAga2FibGUobGFiZWwgPSBjYXB0aW9uLAogICAgICAgICAgYWxpZ24gPSAiYyIsCiAgICAgICAgICBkaWdpdHMgPSBkaWdpdCwKICAgICAgICAgIGNhcHRpb24gPSBjYXB0aW9uKSAlPiUKICAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gImNlbnRlciIsIGZvbnRfc2l6ZSA9IDE2KSAlPiUKICAgIGZvb3Rub3RlKG5vdGVzKQp9CmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kc2V0d2QoIn4vRG9jdW1lbnRzL1IvRkNIL2RhdGEiKQp3YjRoIDwtIHJlYWRfZXhjZWwoIjguOHRocyBwcm9kdWN0aW9uIGRhdGEueGxzIiwgCiAgICBzaGVldCA9ICJXQjRIIiwgc2tpcCA9IDQpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmNvbF9uYW1lcyA8LSBjKCJkYXRlIiwgInQiLCAiZ2FzIiwgIndhdGVyIiwgInEiLCAiaW50YWtlIiwgCiAgICAgICAgICAgICAgICJRIiwgImN1bV93YXRlciIsICJjdW1fZmx1aWQiLCAiY3VtX2dhcyIpCnVuaXRzIDwtYygiIiwgIiIsICJtY2ZkIiwgImJ3cGQiLCAiYm9wZCIsIAogICAgICAgICAgInBzaSIsICJiYmxzIiwgImJibHMiLCAiYmJscyIsICJtY2YiKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgc2V0IGNvbHVtbnMgbmFtZXMKd2I0aCA8LSBzZXROYW1lcyh3YjRoLCBjb2xfbmFtZXMpCmBgYAoKIyBJbnRyb2R1Y3Rpb24gIAoKVGhlIGZvbGxvd2luZyBkb2N1bWVudCBzaG93cyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgb2YgYSBob3Jpem9udGFsIHdlbGwgaW4gYW4gdW5jb252ZW50aW9uYWwgZmllbGQgbG9jYXRlZCBpbiB0aGUgVVNBLgoKVGhlICoqUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCoqIHdhcyB1c2VkIHRvIGFuYWx5emUgdGhlIHdlbGwuCgpUaGUgb2JqZWN0aXZlIG9mIHRoZSBhbmFseXNpcyBpcyB0byBkZXRlcm1pbmUgdGhlICoqcmVtYWluaW5nIHJlc2VydmVzKiogb2YgdGhlIHdlbGwgdXAgdG8gYSB0ZWNobmljYWwgbGltaXQuCgpUaGUgcmVtYWluaW5nIHJlc2VydmVzIGlzIGRlZmluZWQgYXMgKipEZXZlbG9wZWQgUHJvZHVjaW5nIFJlc2VydmVzIChEUFIpKioKClRoZSB0ZWNobmljYWwgbGltaXQgaXMgZGVmaW5lZCBhcyB0aGUgcHJvZHVjdGlvbiByYXRlIG9mIHRoZSB3ZWxsIGF0IHRoZSBlbmQgb2YgdGhlIGZvcmVjYXN0IHByb2R1Y3Rpb24gdGltZS4KCiMgT3ZlcnZpZXcgUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCAKClRoZSBwdXJwb3NlIG9mIHRoZSBwcm9kdWN0aW9uIGZvcmVjYXN0aW5nIG1vZGVsIGlzIHRvIGVzdGltYXRlIHRoZSBwcm92ZW4gcmVzZXJ2ZXMgb2YgYW4gb2lsLXByb2R1Y2luZyBmaWVsZC4KCkluaXRpYWxseSwgdGhlICoqUHJvZHVjdGlvbiBGb3JlY2FzdCBNb2RlbCoqIHVzZXMgcHJvZHVjdGlvbiBkYXRhIGZyb20gd2VsbHMgb3IgdGhlIGZpZWxkLCBhbmQgZnJvbSB0aGVyZSwgdGhlIHN5c3RlbSBnZW5lcmF0ZXMgYW4gYW5hbHl0aWNhbCBmdW5jdGlvbiB3aXRoIHRoZSBiZXN0IHBvc3NpYmxlIGZpdCBvZiBwcm9kdWN0aW9uIGhpc3RvcnkuIFRoaXMgZnVuY3Rpb24gaXMgbGF0ZXIgdXNlZCB0byBmb3JlY2FzdCB3ZWxsIG9yIGZpZWxkIHByb2R1Y3Rpb24uCgpJbiBhZGRpdGlvbiB0byB0aGUgcHJvZHVjdGlvbiBkYXRhLCB0aGUgc3lzdGVtIHVzZXMgYXMgaW5wdXQsIGEgcGFyYW1ldGVyIHRoYXQgaXMgcmVsYXRlZCB0byB0aGUgZGFpbHkgcHJvZHVjdGlvbiByYXRlIGF0IHRoZSB0ZWNobmljYWwgbGltaXQuIFRoaXMgcGFyYW1ldGVyIGlzIGV4cHJlc3NlZCBpbiB1bml0cyBvZiB0aW1lIGFuZCBpcyB1c2VkIGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgcHJvZHVjdGlvbiBmb3JlY2FzdC4KCkNvbmNlcHR1YWxseSwgdGhlIHRlY2huaWNhbCBsaW1pdCBjb3VsZCBiZSBlc3RhYmxpc2hlZCBpbiBhdCBsZWFzdCB0d28gZGlmZmVyZW50IHdheXM6IDEpIGJ5IHRoZSBvd25lciBvciBvcGVyYXRvciBvZiB0aGUgZmllbGQgb3IgYW5vdGhlciBvcHRpb24sIDIpIGl0IGlzIHRvIHVzZSB0aGUgcHJvZHVjdGlvbiBwcm9maWxlIGdlbmVyYXRlZCBieSB0aGUgc3lzdGVtIHRvIGNhcnJ5IG91dCBhbiBlY29ub21pYyBldmFsdWF0aW9uLCBzbyB0aGF0IHRoZSAqKkNhc2ggRmxvdyBhbmFseXNpcyoqIGFsbG93cyBlc3RpbWF0aW5nIHRoZSBlY29ub21pYyBsaW1pdC4KCkZpbmFsbHksIHRoZSBmb3JlY2FzdCByZXN1bHRzIGFyZSBjb25zaWRlcmVkIHRvIHJlcHJlc2VudCB0aGUgKipEZXZlbG9wZWQgUHJvZHVjaW5nIFJlc2VydmVzKiouCgpUaGUgW1BSTVMgc3lzdGVtXSgjUmVmZXJlbmNlKSB1c2VzIGEgc3ViLWNsYXNzaWZpY2F0aW9uIG9mIHRoZSBwcm9qZWN0IHJlc2VydmVzLiBTcGVjaWZpY2FsbHksIHByb3ZlbiByZXNlcnZlcyBhcmUgY2FsbGVkICoqT24gUHJvZHVjdGlvbioqIGFuZCBpcyBzZWxmLWV2aWRlbnQgaW4gdGhhdCB0aGUgcHJvamVjdCBtdXN0IGJlICoqcHJvZHVjaW5nIGFuZCBzZWxsaW5nIHBldHJvbGV1bSB0byBtYXJrZXQgYXMgYXQgdGhlIGVmZmVjdGl2ZSBkYXRlKiogb2YgdGhlIGV2YWx1YXRpb24uCgojIFdlbGwgV0I0aCAtIFByb2R1Y3Rpb24gZGF0YSAgCgojIyBWYXJpYWJsZXMgYW5kIHVuaXRzICAKCi0gcTogZGFpbHkgb2lsIHByb2R1Y3Rpb24sIHVuaXQ6IHN0YW5kYXJkIGJhcnJlbHMgb2Ygb2lsIHBlciBkYXlzIChzdGIvZCkgIAotIFE6IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiB0aG91c2FuZCBzdGFuZGFyZCBiYXJyZWxzIG9mIG9pbCAobXN0YikgCi0gVGltZTogZGF5cyAgCgpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyB1cGRhdGUgU3VidGl0bGUgb2JqZWN0ClRpdGxlID0gcGFzdGUoIldlbGw6IiwgIldCNGgiKQoKIyMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgdXBkYXRlIFN1YnRpdGxlIG9iamVjdAoKU3VidGl0bGUgPSBwYXN0ZSgKICAicTogZGFpbHkgb2lsIHByb2R1Y3Rpb24sIHVuaXRzID0gc3RiL2QgXG5ROiBDdW11bGF0aXZlIG9pbCBwcm9kdWN0aW9uLCB1bml0cyA9IG1zdGIiCikKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIyB1cGRhdGUgWCAmIFkgb2JqZWN0cyAgCgpYID0gIlRpbWUgKGRheXMpIgpZID0gIiIKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIyBjYXB0aW9uCkNhcHRpb24gPSAiRXVsZXJFbmVyZ3kiCgojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyB1cGRhdGUgTGFicyBvYmplY3QKCkxhYnMgPC0gIGxhYnModGl0bGUgPSBUaXRsZSwgCiAgICAgICAgICAgICAgc3VidGl0bGUgPSBTdWJ0aXRsZSwKICAgICAgICAgICAgICB4ID0gWCwgCiAgICAgICAgICAgICAgeSA9IFksIAogICAgICAgICAgICAgIGNvbG91ciA9ICJMZWdlbmQ6IiwKICAgICAgICAgICAgICBjYXB0aW9uID0gQ2FwdGlvbikKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAKIyBtYWtlIFBsb3Rfc3VidGl0bGUgIAoKUGxvdF9zdWJ0aXRsZSA8LSB0aGVtZShwbG90LnN1YnRpdGxlID0gCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X3RleHQoc2l6ZSA9IDE4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlID0gImJvbGQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJkYXJrZ3JlZW4iKSwgICAKICAgICAgICAgICAgICAgICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibHVlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTQsIAogICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSA9ICJib2xkIikpCgp3YjRoIDwtIHdiNGggJT4lIAogIHNlbGVjdChkYXRlLCB0LCBxLCBRKQoKZ2dwbG90KHdiNGgpICsgCiAgZ2VvbV9saW5lKGFlcyh0LCBxLCBjb2xvciA9ICJxIiksIGFscGhhID0gMC41KSArCiAgZ2VvbV9saW5lKGFlcyh0LCBRLzEwMDAsIGNvbG9yID0gIlEiKSwgc2l6ZSA9IDEuMSkgKyAKICBMYWJzICsgCiAgUGxvdF9zdWJ0aXRsZSArICAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAncmlnaHQnKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClEgPC0gd2I0aCRRCm5sc19maXQgPC0gbmxzX2ZpdF9mdW4od2I0aCwgUSwgIkZBTFNFIikKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpkZi5nbGFuY2UgPC0gZ2xhbmNlKG5sc19maXQpCmRmLnRpZHkgPC0gdGlkeShubHNfZml0KQpkZi5hdWcgPC0gYXVnbWVudChubHNfZml0KSAlPiUgcmVuYW1lKFFtb2RlbCA9IC5maXR0ZWQpIApgYGAKCiMgV2VsbCBXQjRoIC0gTW9kZWwgUmVzdWx0cwoKIyMgVmFyaWFibGVzIGFuZCB1bml0cyAgCgotIFE6IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiBzdGIgCi0gUWY6IGZvcmVjYXN0IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiBzdGIKLSBUaW1lOiBkYXlzICAKCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClN1YnRpdGxlID0gcGFzdGUoCiAgIlE6IEN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24gXG5RZjogRm9yZWNhc3QgY3VtdWxhdGl2ZSBvaWwgcHJvZHVjdGlvbiIKKQoKWSA9ICJzdGIiCgpMYWJzIDwtICBsYWJzKHRpdGxlID0gVGl0bGUsIAogICAgICAgICAgICAgIHN1YnRpdGxlID0gU3VidGl0bGUsCiAgICAgICAgICAgICAgeCA9IFgsIAogICAgICAgICAgICAgIHkgPSBZLCAKICAgICAgICAgICAgICBjb2xvdXIgPSAiTGVnZW5kOiIsCiAgICAgICAgICAgICAgY2FwdGlvbiA9IENhcHRpb24pCgpnZ3Bsb3QoZGYuYXVnKSArIAogIGdlb21fbGluZShhZXModCwgUSwgY29sb3IgPSAiUSIpLCBzaXplID0gMS4yKSArCiAgZ2VvbV9saW5lKGFlcyh0LCBRbW9kZWwsIGNvbG9yID0gIlFmIikpICArIAogIExhYnMgKyAKICBQbG90X3N1YnRpdGxlICsgIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdyaWdodCcpCmBgYAoKIyBXZWxsIFdCNGggLSBNb2RlbCBGb3JlY2FzdAoKIyMgQ3VtdWxhdGl2ZSBvaWwgcHJvZHVjdGlvbiAgCgotIFE6IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiBzdGIgCi0gUWY6IGZvcmVjYXN0IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiBzdGIKLSBUaW1lOiB5ZWFycyAKCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZ0dyA8LSA3MzEwCmRmLmZvci5RIDwtIGZvcmVjYXN0X1FfZnVuKG5sc19maXQsIHdiNGgpCmRmLmZvci5RJFFmIDwtIGRmLmZvci5RJGZvcmVjYXN0X1EKZGYuam9pbiA8LSBmdWxsX2pvaW4od2I0aCwgZGYuZm9yLlEsIGJ5ID0gInQiKQpkZi5qb2luIDwtIGRmLmpvaW4gJT4lIAogIG11dGF0ZShxZiA9IFFmIC0gbGFnKFFmLCBuPTFMKSkgJT4lCiAgZmlsdGVyKHFmID49IDEwKQoKZGYgPC0gdGliYmxlKApEYXRlLmFjdHVhbCA9IG1heCh3YjRoJGRhdGUpLApZZWFycy5hY3R1YWwgPSBtYXgod2I0aCR0KS8zNjUsClEgPSBtYXgod2I0aCRRKSwKWWVhci5mID0gbWF4KGRmLmpvaW4kdCkvMzY1IC0gWWVhcnMuYWN0dWFsLApRZiA9IG1heChkZi5qb2luJGZvcmVjYXN0X1EpLApEUFIgPSBRZiAtIFEsCnFlID0gbWluKGRmLmpvaW4kcWYsIG5hLnJtID0gVCkKKQoKU3VidGl0bGUgPSBwYXN0ZSgKICAiUTogQ3VtdWxhdGl2ZSBvaWwgcHJvZHVjdGlvbiBcblFmOiBGb3JlY2FzdCBjdW11bGF0aXZlIG9pbCBwcm9kdWN0aW9uIgopCgpZID0gInN0YiIKWCA9ICJUaW1lICh5ZWFycykiCgpMYWJzIDwtICBsYWJzKHRpdGxlID0gVGl0bGUsIAogICAgICAgICAgICAgIHN1YnRpdGxlID0gU3VidGl0bGUsCiAgICAgICAgICAgICAgeCA9IFgsIAogICAgICAgICAgICAgIHkgPSBZLCAKICAgICAgICAgICAgICBjb2xvdXIgPSAiTGVnZW5kOiIsCiAgICAgICAgICAgICAgY2FwdGlvbiA9IENhcHRpb24pCgoKZ2dwbG90KGRmLmpvaW4pICsgCiAgZ2VvbV9saW5lKGFlcyh0LzM2NSwgUWYsIGNvbG9yID0gIlFmIikpICsKICBnZW9tX2xpbmUoYWVzKHQvMzY1LCBRLCBjb2xvciA9ICJRIiksIHNpemUgPSAxLjEpICArIAogIExhYnMgKyAKICBQbG90X3N1YnRpdGxlICsgIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdyaWdodCcpCmBgYAoKIyMgRGFpbHkgb2lsIHByb2R1Y3Rpb24gICAgCgotIHE6IGRhaWx5IG9pbCBwcm9kdWN0aW9uLCB1bml0czogc3RiIAotIHFmOiBmb3JlY2FzdCBkYWlseSBvaWwgcHJvZHVjdGlvbiwgdW5pdHM6IHN0YgotIFRpbWU6IHllYXJzIAoKYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KU3VidGl0bGUgPSBwYXN0ZSgKICAicTogRGFpbHkgb2lsIHByb2R1Y3Rpb24gXG5xZjogRm9yZWNhc3QgZGFpbHkgb2lsIHByb2R1Y3Rpb24iCikKClkgPSAic3RiIgpYID0gIlRpbWUgKHllYXJzKSIKCkxhYnMgPC0gIGxhYnModGl0bGUgPSBUaXRsZSwgCiAgICAgICAgICAgICAgc3VidGl0bGUgPSBTdWJ0aXRsZSwKICAgICAgICAgICAgICB4ID0gWCwgCiAgICAgICAgICAgICAgeSA9IFksIAogICAgICAgICAgICAgIGNvbG91ciA9ICJMZWdlbmQ6IiwKICAgICAgICAgICAgICBjYXB0aW9uID0gQ2FwdGlvbikKCgpnZ3Bsb3QoZGYuam9pbikgKyAKICBnZW9tX2xpbmUoYWVzKHQvMzY1LCBxLCBjb2xvciA9ICJxIiksIHNpemUgPSAwLjUsIGFscGhhID0gMC42KSAgKyAgIAogIGdlb21fbGluZShhZXModC8zNjUsIHFmLCBjb2xvciA9ICJxZiIpLCBzaXplID0gMS4xKSArCiAgTGFicyArIAogIFBsb3Rfc3VidGl0bGUgKyAgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ3JpZ2h0JykKYGBgCgojIFdlbGwgV0I0aCBzdW1tYXJ5CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpkZiA8LSB0aWJibGUoCkRhdGUuYWN0dWFsID0gbWF4KHdiNGgkZGF0ZSksClllYXJzLmFjdHVhbCA9IG1heCh3YjRoJHQpLzM2NSwKUSA9IG1heCh3YjRoJFEpLApZZWFyLmYgPSBtYXgoZGYuam9pbiR0KS8zNjUgLSBZZWFycy5hY3R1YWwsClFmID0gbWF4KGRmLmpvaW4kZm9yZWNhc3RfUSksCkRQUiA9IFFmIC0gUSwKcWUgPSB0YWlsKGRmLmpvaW4kcWYsIG4gPSAxTCkKKQpwcmludF90YWJsZShkZiwgIkZvcmVjYXN0IFByb2R1Y3Rpb24gTW9kZWwgLSBXQjRoIHdlbGwgUmVzdWx0cyAiLCAwLCAiCiAgICAgICAgICAgIERhdGUuYWN0dWFsOiBwcm9kdWN0aW9uIGRhdGUKICAgICAgICAgICAgWWVhcnMuYWN0dWFsOiBwcm9kdWN0aW9uIHllYXJzCiAgICAgICAgICAgIFE6IGFjdHVhbCBjdW11bGF0aXZlIG9pbCBwcm9kdWN0aW9uLCB1bml0czogc3RiCiAgICAgICAgICAgIFllYXIuZjogZm9yZWNhc3QgeWVhcnMKICAgICAgICAgICAgUWY6IGZvcmVjYXN0IGN1bXVsYXRpdmUgb2lsIHByb2R1Y3Rpb24sIHVuaXRzOiBzdGIKICAgICAgICAgICAgRFBSOiBEZXZlbG9wZWQgUHJvZHVjaW5nIFJlc2VydmVzLCB1bml0czogc3RiCiAgICAgICAgICAgIHFlOiBkYWlseSBvaWwgcHJvZHVjdGlvbiBhdCBmb3JlY2FzdCB5ZWFycywgdW5pdHM6c3RiL2QKICAgICAgICAgICAgc3RiOiBzdGFuZGFyZCBiYXJyZWwgb2Ygb2lsIikKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpyZWFkX2V4Y2VsX2FsbHNoZWV0cyA8LSBmdW5jdGlvbihmaWxlbmFtZSwgdGliYmxlID0gRkFMU0UpIHsKICAgICMgSSBwcmVmZXIgc3RyYWlnaHQgZGF0YS5mcmFtZXMKICAgICMgYnV0IGlmIHlvdSBsaWtlIHRpZHl2ZXJzZSB0aWJibGVzICh0aGUgZGVmYXVsdCB3aXRoIHJlYWRfZXhjZWwpCiAgICAjIHRoZW4ganVzdCBwYXNzIHRpYmJsZSA9IFRSVUUKICAgIHNoZWV0cyA8LSByZWFkeGw6OmV4Y2VsX3NoZWV0cyhmaWxlbmFtZSkKICAgIHggPC0gbGFwcGx5KHNoZWV0cywgZnVuY3Rpb24oWCkgcmVhZHhsOjpyZWFkX2V4Y2VsKGZpbGVuYW1lLCBzaGVldCA9IFgpKQogICAgaWYoIXRpYmJsZSkgeCA8LSBsYXBwbHkoeCwgYXMuZGF0YS5mcmFtZSkKICAgIG5hbWVzKHgpIDwtIHNoZWV0cwogICAgeAp9CgpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnNldHdkKCJ+L0RvY3VtZW50cy9SL0ZDSC9kYXRhIikKbXlzaGVldHMgPC0gcmVhZF9leGNlbF9hbGxzaGVldHMoIjguOHRocyBwcm9kdWN0aW9uIGRhdGEueGxzIikKYGBgCgojIFJlZmVyZW5jZSB7I1JlZmVyZW5jZX0gCgoqKkd1aWRlbGluZXMgZm9yIEFwcGxpY2F0aW9uIG9mIHRoZSBQZXRyb2xldW0gUmVzb3VyY2VzIE1hbmFnZW1lbnQgU3lzdGVtKiouICgyMDExKS4gIAoKSG91c3RvbiwgVGV4YXM6IFNvY2lldHkgb2YgUGV0cm9sZXVtIEV2YWx1YXRpb24gRW5naW5lZXJzLCBBbWVyaWNhbiBBc3NvY2lhdGlvbiBvZiBQZXRyb2xldW0gR2VvbG9naXN0cywgV29ybGQgUGV0cm9sZXVtIENvdW5jaWwsIFNvY2lldHkgb2YgUGV0cm9sZXVtIEV2YWx1YXRpb24gRW5naW5lZXJzIGFuZCBTb2NpZXR5IG9mIEV4cGxvcmF0aW9uIEdlb3BoeXNpY2lzdHMuICAK