buby 1.3.3-java → 1.5.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/README.rdoc +28 -14
  2. data/Rakefile +96 -6
  3. data/VERSION.yml +5 -0
  4. data/bin/buby +2 -0
  5. data/buby.gemspec +102 -17
  6. data/{java/src → ext/buby/burp}/BurpExtender.java +189 -29
  7. data/ext/burp_interfaces/burp/IBurpExtender.java +31 -0
  8. data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +785 -0
  9. data/ext/burp_interfaces/burp/IContextMenuFactory.java +38 -0
  10. data/ext/burp_interfaces/burp/IContextMenuInvocation.java +156 -0
  11. data/ext/burp_interfaces/burp/ICookie.java +53 -0
  12. data/ext/burp_interfaces/burp/IExtensionHelpers.java +352 -0
  13. data/ext/burp_interfaces/burp/IExtensionStateListener.java +27 -0
  14. data/ext/burp_interfaces/burp/IHttpListener.java +37 -0
  15. data/ext/burp_interfaces/burp/IHttpRequestResponse.java +102 -0
  16. data/ext/burp_interfaces/burp/IHttpRequestResponsePersisted.java +26 -0
  17. data/ext/burp_interfaces/burp/IHttpRequestResponseWithMarkers.java +44 -0
  18. data/ext/burp_interfaces/burp/IHttpService.java +39 -0
  19. data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +116 -0
  20. data/ext/burp_interfaces/burp/IIntruderAttack.java +31 -0
  21. data/ext/burp_interfaces/burp/IIntruderPayloadGenerator.java +50 -0
  22. data/ext/burp_interfaces/burp/IIntruderPayloadGeneratorFactory.java +40 -0
  23. data/ext/burp_interfaces/burp/IIntruderPayloadProcessor.java +45 -0
  24. data/{java/src → ext/burp_interfaces}/burp/IMenuItemHandler.java +36 -40
  25. data/ext/burp_interfaces/burp/IMessageEditor.java +64 -0
  26. data/ext/burp_interfaces/burp/IMessageEditorController.java +49 -0
  27. data/ext/burp_interfaces/burp/IMessageEditorTab.java +102 -0
  28. data/ext/burp_interfaces/burp/IMessageEditorTabFactory.java +38 -0
  29. data/ext/burp_interfaces/burp/IParameter.java +104 -0
  30. data/ext/burp_interfaces/burp/IProxyListener.java +37 -0
  31. data/ext/burp_interfaces/burp/IRequestInfo.java +95 -0
  32. data/ext/burp_interfaces/burp/IResponseInfo.java +54 -0
  33. data/ext/burp_interfaces/burp/IScanIssue.java +120 -0
  34. data/ext/burp_interfaces/burp/IScanQueueItem.java +80 -0
  35. data/ext/burp_interfaces/burp/IScannerCheck.java +89 -0
  36. data/ext/burp_interfaces/burp/IScannerInsertionPoint.java +156 -0
  37. data/ext/burp_interfaces/burp/IScannerInsertionPointProvider.java +38 -0
  38. data/ext/burp_interfaces/burp/IScannerListener.java +30 -0
  39. data/ext/burp_interfaces/burp/IScopeChangeListener.java +25 -0
  40. data/ext/burp_interfaces/burp/ISessionHandlingAction.java +51 -0
  41. data/ext/burp_interfaces/burp/ITab.java +38 -0
  42. data/ext/burp_interfaces/burp/ITempFile.java +33 -0
  43. data/ext/burp_interfaces/burp/ITextEditor.java +90 -0
  44. data/lib/buby/burp_extender/console_frame.rb +33 -0
  45. data/lib/buby/burp_extender/console_pane.rb +26 -0
  46. data/lib/buby/burp_extender/console_tab.rb +15 -0
  47. data/lib/buby/burp_extender/context_menu.rb +29 -0
  48. data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
  49. data/lib/buby/burp_extender/context_menu_item.rb +13 -0
  50. data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
  51. data/lib/buby/burp_extender/jmenu.rb +11 -0
  52. data/lib/buby/burp_extender/jmenu_item.rb +12 -0
  53. data/lib/buby/burp_extender/menu.rb +11 -0
  54. data/lib/buby/burp_extender/menu_item.rb +12 -0
  55. data/lib/buby/burp_extender.rb +339 -0
  56. data/lib/buby/context_menu_factory.rb +35 -0
  57. data/lib/buby/cookie.rb +37 -0
  58. data/lib/buby/extender.rb +156 -0
  59. data/lib/buby/http_listener.rb +29 -0
  60. data/lib/buby/{extends → implants}/buby_array_wrapper.rb +0 -0
  61. data/lib/buby/implants/context_menu_invocation.rb +113 -0
  62. data/lib/buby/implants/cookie.rb +47 -0
  63. data/lib/buby/implants/extension_helpers.rb +286 -0
  64. data/lib/buby/{extends → implants}/http_request_response.rb +8 -1
  65. data/lib/buby/implants/intercepted_proxy_message.rb +53 -0
  66. data/lib/buby/implants/intruder_attack.rb +42 -0
  67. data/lib/buby/implants/jruby.rb +64 -0
  68. data/lib/buby/implants/message_editor.rb +70 -0
  69. data/lib/buby/implants/message_editor_controller.rb +60 -0
  70. data/lib/buby/implants/parameter.rb +84 -0
  71. data/lib/buby/implants/request_info.rb +47 -0
  72. data/lib/buby/implants/response_info.rb +44 -0
  73. data/lib/buby/{extends → implants}/scan_issue.rb +1 -2
  74. data/lib/buby/implants/scan_queue_item.rb +53 -0
  75. data/lib/buby/implants/scanner_insertion_point.rb +92 -0
  76. data/lib/buby/implants/temp_file.rb +43 -0
  77. data/lib/buby/implants/text_editor.rb +63 -0
  78. data/lib/buby/implants.rb +28 -0
  79. data/lib/buby/intruder_payload_generator.rb +60 -0
  80. data/lib/buby/intruder_payload_generator_factory.rb +32 -0
  81. data/lib/buby/intruder_payload_processor.rb +38 -0
  82. data/lib/buby/message_editor_controller.rb +41 -0
  83. data/lib/buby/message_editor_tab.rb +98 -0
  84. data/lib/buby/message_editor_tab_factory.rb +28 -0
  85. data/lib/buby/parameter/base.rb +40 -0
  86. data/lib/buby/parameter/body.rb +7 -0
  87. data/lib/buby/parameter/cookie.rb +7 -0
  88. data/lib/buby/parameter/url.rb +7 -0
  89. data/lib/buby/parameter.rb +15 -0
  90. data/lib/buby/proxy_listener.rb +26 -0
  91. data/lib/buby/scan_issue.rb +112 -0
  92. data/lib/buby/scanner_check.rb +84 -0
  93. data/lib/buby/scanner_insertion_point.rb +118 -0
  94. data/lib/buby/scanner_insertion_point_provider.rb +27 -0
  95. data/lib/buby/scanner_listener.rb +22 -0
  96. data/lib/buby/scope_change_listener.rb +19 -0
  97. data/lib/buby/session_handling_action.rb +43 -0
  98. data/lib/buby/tab.rb +37 -0
  99. data/lib/buby/version.rb +9 -0
  100. data/lib/buby.rb +892 -101
  101. metadata +118 -22
  102. data/VERSION +0 -1
  103. data/java/buby.jar +0 -0
  104. data/java/src/burp/IBurpExtender.java +0 -180
  105. data/java/src/burp/IBurpExtenderCallbacks.java +0 -373
  106. data/java/src/burp/IHttpRequestResponse.java +0 -156
  107. data/java/src/burp/IScanIssue.java +0 -106
  108. data/java/src/burp/IScanQueueItem.java +0 -76
  109. data/lib/buby/extends.rb +0 -4
@@ -0,0 +1,27 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IExtensionStateListener.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerExtensionStateListener()</code> to
15
+ * register an extension state listener. The listener will be notified of
16
+ * changes to the extension's state. <b>Note:</b> Any extensions that start
17
+ * background threads or open system resources (such as files or database
18
+ * connections) should register a listener and terminate threads / close
19
+ * resources when the extension is unloaded.
20
+ */
21
+ public interface IExtensionStateListener
22
+ {
23
+ /**
24
+ * This method is called when the extension is unloaded.
25
+ */
26
+ void extensionUnloaded();
27
+ }
@@ -0,0 +1,37 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IHttpListener.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * Extensions can implement this interface and then call
14
+ * <code>IBurpExtenderCallbacks.registerHttpListener()</code> to register an
15
+ * HTTP listener. The listener will be notified of requests and responses made
16
+ * by any Burp tool. Extensions can perform custom analysis or modification of
17
+ * these messages by registering an HTTP listener.
18
+ */
19
+ public interface IHttpListener
20
+ {
21
+ /**
22
+ * This method is invoked when an HTTP request is about to be issued, and
23
+ * when an HTTP response has been received.
24
+ *
25
+ * @param toolFlag A flag indicating the Burp tool that issued the request.
26
+ * Burp tool flags are defined in the
27
+ * <code>IBurpExtenderCallbacks</code> interface.
28
+ * @param messageIsRequest Flags whether the method is being invoked for a
29
+ * request or response.
30
+ * @param messageInfo Details of the request / response to be processed.
31
+ * Extensions can call the setter methods on this object to update the
32
+ * current message and so modify Burp's behavior.
33
+ */
34
+ void processHttpMessage(int toolFlag,
35
+ boolean messageIsRequest,
36
+ IHttpRequestResponse messageInfo);
37
+ }
@@ -0,0 +1,102 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IHttpRequestResponse.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to retrieve and update details about HTTP messages.
14
+ *
15
+ * <b>Note:</b> The setter methods generally can only be used before the message
16
+ * has been processed, and not in read-only contexts. The getter methods
17
+ * relating to response details can only be used after the request has been
18
+ * issued.
19
+ */
20
+ public interface IHttpRequestResponse
21
+ {
22
+ /**
23
+ * This method is used to retrieve the request message.
24
+ *
25
+ * @return The request message.
26
+ */
27
+ byte[] getRequest();
28
+
29
+ /**
30
+ * This method is used to update the request message.
31
+ *
32
+ * @param message The new request message.
33
+ */
34
+ void setRequest(byte[] message);
35
+
36
+ /**
37
+ * This method is used to retrieve the response message.
38
+ *
39
+ * @return The response message.
40
+ */
41
+ byte[] getResponse();
42
+
43
+ /**
44
+ * This method is used to update the response message.
45
+ *
46
+ * @param message The new response message.
47
+ */
48
+ void setResponse(byte[] message);
49
+
50
+ /**
51
+ * This method is used to retrieve the user-annotated comment for this item,
52
+ * if applicable.
53
+ *
54
+ * @return The user-annotated comment for this item, or null if none is set.
55
+ */
56
+ String getComment();
57
+
58
+ /**
59
+ * This method is used to update the user-annotated comment for this item.
60
+ *
61
+ * @param comment The comment to be assigned to this item.
62
+ */
63
+ void setComment(String comment);
64
+
65
+ /**
66
+ * This method is used to retrieve the user-annotated highlight for this
67
+ * item, if applicable.
68
+ *
69
+ * @return The user-annotated highlight for this item, or null if none is
70
+ * set.
71
+ */
72
+ String getHighlight();
73
+
74
+ /**
75
+ * This method is used to update the user-annotated highlight for this item.
76
+ *
77
+ * @param color The highlight color to be assigned to this item. Accepted
78
+ * values are: red, orange, yellow, green, cyan, blue, pink, magenta, gray,
79
+ * or a null String to clear any existing highlight.
80
+ */
81
+ void setHighlight(String color);
82
+
83
+ /**
84
+ * This method is used to retrieve the HTTP service for this request /
85
+ * response.
86
+ *
87
+ * @return An
88
+ * <code>IHttpService</code> object containing details of the HTTP service.
89
+ */
90
+ IHttpService getHttpService();
91
+
92
+ /**
93
+ * This method is used to update the HTTP service for this request /
94
+ * response.
95
+ *
96
+ * @param httpService An
97
+ * <code>IHttpService</code> object containing details of the new HTTP
98
+ * service.
99
+ */
100
+ void setHttpService(IHttpService httpService);
101
+
102
+ }
@@ -0,0 +1,26 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IHttpRequestResponsePersisted.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used for an
14
+ * <code>IHttpRequestResponse</code> object whose request and response messages
15
+ * have been saved to temporary files using
16
+ * <code>IBurpExtenderCallbacks.saveBuffersToTempFiles()</code>.
17
+ */
18
+ public interface IHttpRequestResponsePersisted extends IHttpRequestResponse
19
+ {
20
+ /**
21
+ * This method is used to permanently delete the saved temporary files. It
22
+ * will no longer be possible to retrieve the request or response for this
23
+ * item.
24
+ */
25
+ void deleteTempFiles();
26
+ }
@@ -0,0 +1,44 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IHttpRequestResponseWithMarkers.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.List;
13
+
14
+ /**
15
+ * This interface is used for an
16
+ * <code>IHttpRequestResponse</code> object that has had markers applied.
17
+ * Extensions can create instances of this interface using
18
+ * <code>IBurpExtenderCallbacks.applyMarkers()</code>, or provide their own
19
+ * implementation. Markers are used in various situations, such as specifying
20
+ * Intruder payload positions, Scanner insertion points, and highlights in
21
+ * Scanner issues.
22
+ */
23
+ public interface IHttpRequestResponseWithMarkers extends IHttpRequestResponse
24
+ {
25
+ /**
26
+ * This method returns the details of the request markers.
27
+ *
28
+ * @return A list of index pairs representing the offsets of markers for the
29
+ * request message. Each item in the list is an int[2] array containing the
30
+ * start and end offsets for the marker. The method may return
31
+ * <code>null</code> if no request markers are defined.
32
+ */
33
+ List<int[]> getRequestMarkers();
34
+
35
+ /**
36
+ * This method returns the details of the response markers.
37
+ *
38
+ * @return A list of index pairs representing the offsets of markers for the
39
+ * response message. Each item in the list is an int[2] array containing the
40
+ * start and end offsets for the marker. The method may return
41
+ * <code>null</code> if no response markers are defined.
42
+ */
43
+ List<int[]> getResponseMarkers();
44
+ }
@@ -0,0 +1,39 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IHttpService.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to provide details about an HTTP service, to which
14
+ * HTTP requests can be sent.
15
+ */
16
+ public interface IHttpService
17
+ {
18
+ /**
19
+ * This method returns the hostname or IP address for the service.
20
+ *
21
+ * @return The hostname or IP address for the service.
22
+ */
23
+ String getHost();
24
+
25
+ /**
26
+ * This method returns the port number for the service.
27
+ *
28
+ * @return The port number for the service.
29
+ */
30
+ int getPort();
31
+
32
+ /**
33
+ * This method returns the protocol for the service.
34
+ *
35
+ * @return The protocol for the service. Expected values are "http" or
36
+ * "https".
37
+ */
38
+ String getProtocol();
39
+ }
@@ -0,0 +1,116 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IInterceptedProxyMessage.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.net.InetAddress;
13
+
14
+ /**
15
+ * This interface is used to represent an HTTP message that has been intercepted
16
+ * by Burp Proxy. Extensions can register an
17
+ * <code>IProxyListener</code> to receive details of proxy messages using this
18
+ * interface. *
19
+ */
20
+ public interface IInterceptedProxyMessage
21
+ {
22
+ /**
23
+ * This action causes Burp Proxy to follow the current interception rules to
24
+ * determine the appropriate action to take for the message.
25
+ */
26
+ static final int ACTION_FOLLOW_RULES = 0;
27
+ /**
28
+ * This action causes Burp Proxy to present the message to the user for
29
+ * manual review or modification.
30
+ */
31
+ static final int ACTION_DO_INTERCEPT = 1;
32
+ /**
33
+ * This action causes Burp Proxy to forward the message to the remote server
34
+ * or client, without presenting it to the user.
35
+ */
36
+ static final int ACTION_DONT_INTERCEPT = 2;
37
+ /**
38
+ * This action causes Burp Proxy to drop the message.
39
+ */
40
+ static final int ACTION_DROP = 3;
41
+ /**
42
+ * This action causes Burp Proxy to follow the current interception rules to
43
+ * determine the appropriate action to take for the message, and then make a
44
+ * second call to processProxyMessage.
45
+ */
46
+ static final int ACTION_FOLLOW_RULES_AND_REHOOK = 0x10;
47
+ /**
48
+ * This action causes Burp Proxy to present the message to the user for
49
+ * manual review or modification, and then make a second call to
50
+ * processProxyMessage.
51
+ */
52
+ static final int ACTION_DO_INTERCEPT_AND_REHOOK = 0x11;
53
+ /**
54
+ * This action causes Burp Proxy to skip user interception, and then make a
55
+ * second call to processProxyMessage.
56
+ */
57
+ static final int ACTION_DONT_INTERCEPT_AND_REHOOK = 0x12;
58
+
59
+ /**
60
+ * This method retrieves a unique reference number for this
61
+ * request/response.
62
+ *
63
+ * @return An identifier that is unique to a single request/response pair.
64
+ * Extensions can use this to correlate details of requests and responses
65
+ * and perform processing on the response message accordingly.
66
+ */
67
+ int getMessageReference();
68
+
69
+ /**
70
+ * This method retrieves details of the intercepted message.
71
+ *
72
+ * @return An <code>IHttpRequestResponse</code> object containing details of
73
+ * the intercepted message.
74
+ */
75
+ IHttpRequestResponse getMessageInfo();
76
+
77
+ /**
78
+ * This method retrieves the currently defined interception action. The
79
+ * default action is
80
+ * <code>ACTION_FOLLOW_RULES</code>. If multiple proxy listeners are
81
+ * registered, then other listeners may already have modified the
82
+ * interception action before it reaches the current listener. This method
83
+ * can be used to determine whether this has occurred.
84
+ *
85
+ * @return The currently defined interception action. Possible values are
86
+ * defined within this interface.
87
+ */
88
+ int getInterceptAction();
89
+
90
+ /**
91
+ * This method is used to update the interception action.
92
+ *
93
+ * @param interceptAction The new interception action. Possible values are
94
+ * defined within this interface.
95
+ */
96
+ void setInterceptAction(int interceptAction);
97
+
98
+ /**
99
+ * This method retrieves the name of the Burp Proxy listener that is
100
+ * processing the intercepted message.
101
+ *
102
+ * @return The name of the Burp Proxy listener that is processing the
103
+ * intercepted message. The format is the same as that shown in the Proxy
104
+ * Listeners UI - for example, "127.0.0.1:8080".
105
+ */
106
+ String getListenerInterface();
107
+
108
+ /**
109
+ * This method retrieves the client IP address from which the request for
110
+ * the intercepted message was received.
111
+ *
112
+ * @return The client IP address from which the request for the intercepted
113
+ * message was received.
114
+ */
115
+ InetAddress getClientIpAddress();
116
+ }
@@ -0,0 +1,31 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IIntruderAttack.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used to hold details about an Intruder attack.
14
+ */
15
+ public interface IIntruderAttack
16
+ {
17
+ /**
18
+ * This method is used to retrieve the HTTP service for the attack.
19
+ *
20
+ * @return The HTTP service for the attack.
21
+ */
22
+ IHttpService getHttpService();
23
+
24
+ /**
25
+ * This method is used to retrieve the request template for the attack.
26
+ *
27
+ * @return The request template for the attack.
28
+ */
29
+ byte[] getRequestTemplate();
30
+
31
+ }
@@ -0,0 +1,50 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IIntruderPayloadGenerator.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ /**
13
+ * This interface is used for custom Intruder payload generators. Extensions
14
+ * that have registered an
15
+ * <code>IIntruderPayloadGeneratorFactory</code> must return a new instance of
16
+ * this interface when required as part of a new Intruder attack.
17
+ */
18
+ public interface IIntruderPayloadGenerator
19
+ {
20
+ /**
21
+ * This method is used by Burp to determine whether the payload generator is
22
+ * able to provide any further payloads.
23
+ *
24
+ * @return Extensions should return
25
+ * <code>false</code> when all the available payloads have been used up,
26
+ * otherwise
27
+ * <code>true</code>.
28
+ */
29
+ boolean hasMorePayloads();
30
+
31
+ /**
32
+ * This method is used by Burp to obtain the value of the next payload.
33
+ *
34
+ * @param baseValue The base value of the current payload position. This
35
+ * value may be
36
+ * <code>null</code> if the concept of a base value is not applicable (e.g.
37
+ * in a battering ram attack).
38
+ * @return The next payload to use in the attack.
39
+ */
40
+ byte[] getNextPayload(byte[] baseValue);
41
+
42
+ /**
43
+ * This method is used by Burp to reset the state of the payload generator
44
+ * so that the next call to
45
+ * <code>getNextPayload()</code> returns the first payload again. This
46
+ * method will be invoked when an attack uses the same payload generator for
47
+ * more than one payload position, for example in a sniper attack.
48
+ */
49
+ void reset();
50
+ }