How can I make a 404 php page with the 404'd file name in the link, example would be:
http://website.com/WrongPageName.html
would go to
http://website.com/404.php?page=WrongPageName.html
Hi,
How do I access the HTTP POST request body in a WCF REST service?
Here is the service definition:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "EntryPoint")]
MyData GetData();
}
Here is the implementation:
public MyData GetData()
{
return new MyData();
}
I though of using the following code to access the HTTP request:
IncomingWebRequestContext context = WebOperationContext.Current.IncomingRequest;
But the IncomingWebRequestContext only gives access to the headers, not the body.
Thanks.
Could someone enlighten me as to why including www in a ajax request causes it to fail.
i.e. This works:
$('#mydiv').load('http://mydomain.com/getitems');
But this doesn't (returns nothing)
$('#mydiv').load('http://www.mydomain.com/getitems');
Note that www.mydomain.com/getitems is a valid domain, in the sense that if I point my web browser to it I am able to load the page.
If I have a HTTP based RESTful service and I want to POST a search resource and use the PRG pattern for returning the URL to the search-result resource, I have to persist the search-result resource on the server.
Is this a good idea?
If I do persist the search-result resource how long is it persisted for?
Can I control this by a HTTP header of some kind?
Cheers
AWC
Hi,
As part of the college mini-project, I am developing a micro-blogging platform for Android. I am planning to use Django framework in python to handle the communication between Android and remote server so as to make database API independent. I heard its best practice to use HTTP methods for the communication. Which is the best site/book to learn using HTTP methods for Android? I
How to live stream videos from iPhone to server like Ustream or Qik? I know there's something called Http Live Streaming from Apple, but most resources I found only talks about streaming videos from server to iPhone.
Is Apple's Http Living Streaming something I should use? Or something else? Thanks.
How to configure your WCF service to work as normal TCP server? Is it possible, how (how to disable all that binding specific crap so to keep your service URL like http://example.com:4444/service and be able to wirk vith pure HTTP\TCP streams )
The following Rebol code fails due to an out of memory error:
read/binary http://mirror.bytemark.co.uk/ubuntu-releases/lucid/
ubuntu-10.04-desktop-i386.iso
How can I use Rebol to read large binary files over HTTP?
I happens to find that, when a live space page is loaded, inline images are fetched by https protocol instead of http protocol.
This doesn't make sense. The text part of live space is not fetched by https, why images are fetched with https? I bet the https way to fetch image just make the page loaded slower.
Is there any special advantage to choose https over http in this case?
Hello all.
If I have a frame embedded into a html page. The page connects through http. My question is:
If my frame connects through https is the connection and everything still encrypted despite the fact that the container page connects through http?
I'm reading this article about Comet http://en.wikipedia.org/wiki/Comet_(programming). It mentions that browser should support multipart/x-mixed-replace to make XmlHttpRequest Streaming possible.
Why this multipart/x-mixed-replace is necessary?
Without this header, HTTP response can still be chunked and sent piece by piece to browser, right?
I gave a DVD ISO image and would like to use VLC's http function to create URL a user could access, after which the DVD would start up in full screen.
I can make this happen by accepting the defaults
vlc.exe -I http
navigating to localhost:8080 and then browsing and opening the file. How would I modify this activity so that navigating to localhost:8080 instead opens a predetermined file and starts playing it?
How to create a .BAT file to download and unpack a zip file from HTTP server?
We have links like http://example.com/folder.zip and absolute folder link like C:\Users\UserName\Some mixed ??????? English Adress\
if files from zip exist in directory owerrite them.
using only native windows (xp vista win7 etc) BAT functions and files.
Could you add code example, please.
I'm using launching firefox from the command line in a script to get snapshots of pages. These pages have basic http authentication. When using:
firefox http://user:[email protected]
Either a dialog appears, or authentication doesn't work at all.
Is there any option to make firefox open the page without showing the dialog?
I have an ubuntu 10.04 server where I installed mod_evasive using apt-get install libapache2-mod-evasive
I already tried several configurations, the result stays the same.
The blocking does work, but randomly.
I tried with low limis and long blocking periods as well as short limits.
The behaviour I expect is that I can request websites until either page or site limit is reached per given interval.
After that I expect to be blocked until I did not make another request for as long as the block period.
However the behaviour is that I can request sites and after a while I get random 403 blocks, which increase and decrase in percentage, however they are very scattered.
This is an output of siege, so you get an idea:
HTTP/1.1 200 0.09 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.11 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.09 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.09 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.09 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.10 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.08 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.09 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.10 secs: 75 bytes ==> /robots.txt
HTTP/1.1 403 0.09 secs: 242 bytes ==> /robots.txt
HTTP/1.1 200 0.09 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.09 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.10 secs: 75 bytes ==> /robots.txt
HTTP/1.1 200 0.08 secs: 75 bytes ==> /robots.txt
The exac limits in place during this test run were:
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 100
DOSPageInterval 10
DOSSiteInterval 10
DOSBlockingPeriod 120
DOSLogDir /var/log/mod_evasive
DOSEmailNotify ***@gmail.com
DOSWhitelist 127.0.0.1
So I would expect to be blocked at least 120 seconds after being blocked once.
Any ideas aobut this?
I also tried adding my configuration at different places (vhost, server config, directory context) and with of without ifmodule directive...
This doesnt change anything.
Hi,
Sometimes I get exception in my production environment:
Process information
Process ID: 3832
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Exception information
Exception type: System.Web.HttpException
Exception message: Server cannot set status after HTTP headers have been sent.
Request information
Request URL: http://www.myulr.pl/logon
Request path: /logon
User host address: 10.11.9.1
User: user001
Is authenticated: True
Authentication Type: Forms
Thread account name: NT AUTHORITY\NETWORK SERVICE
Thread information
Thread ID: 10
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at System.Web.HttpResponse.set_StatusCode(Int32 value) at
System.Web.HttpResponseWrapper.set_StatusCode(Int32 value) at
System.Web.Mvc.HandleErrorAttribute.OnException(ExceptionContext filterContext) at
System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList(1) filters, Exception exception) at
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.Controller.ExecuteCore() at
System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8(1).<BeginSynchronous>b__7(IAsyncResult _) at
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult(1).End() at
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& ompletedSynchronously)
I didn't noticed this error on my test environment what should I check?
I am using ASP.NET MVC 2 (Release Candidate 2)
I have a magento site and i need to have it redirect to https, i have the cert installed but i am not sure how to mod the htaccess file?
here is a copy of the root htaccess file
thanks
#
uncomment these lines for CGI mode
make sure to specify the correct cgi php binary file name
it might be /cgi-bin/php-cgi
Action php5-cgi /cgi-bin/php5-cgi
AddHandler php5-cgi .php
#
GoDaddy specific options
Options -MultiViews
you might also need to add this line to php.ini
cgi.fix_pathinfo = 1
if it still doesn't work, rename php.ini to php5.ini
#
this line is specific for 1and1 hosting
#AddType x-mapp-php5 .php
#AddHandler x-mapp-php5 .php
#
default index file
DirectoryIndex index.php
#
adjust memory limit
php_value memory_limit 64M
php_value memory_limit 128M
php_value max_execution_time 18000
#
disable magic quotes for php request vars
php_flag magic_quotes_gpc off
#
disable automatic session start
before autoload was initialized
php_flag session.auto_start off
#
enable resulting html compression
#php_flag zlib.output_compression on
#
disable user agent verification to not break multiple image upload
php_flag suhosin.session.cryptua off
#
turn off compatibility with PHP4 when dealing with objects
php_flag zend.ze1_compatibility_mode Off
#
disable POST processing to not break multiple image upload
SecFilterEngine Off
SecFilterScanPOST Off
#
# Insert filter on all content
###SetOutputFilter DEFLATE
# Insert filter on selected content types only
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems...
#BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
#BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
#BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
#SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
#Header append Vary User-Agent env=!dont-vary
#
make HTTPS env vars available for CGI mode
SSLOptions StdEnvVars
#
enable rewrites
Options +FollowSymLinks
RewriteEngine on
#
you can put here your magento root folder
path relative to web root
#RewriteBase /magento/
#
workaround for HTTP authorization
in CGI environment
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
always send 404 on missing files in these folders
RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
#
never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
#
rewrite everything else to index.php
RewriteRule .* index.php [L]
#
Prevent character encoding issues from server overrides
If you still have problems, use the second line instead
AddDefaultCharset Off
#AddDefaultCharset UTF-8
#
s
ExpiresDefault "access plus 1 year"
#
By default allow all access
Order allow,deny
Allow from all
I am using JAXB to create XML file from a result set.
I have created java/ /class files using the xsd with the help of xjc utiliy. Now I am trying to create the xml file using the Marshaller. In the XML file I do not see theh xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" attribute with the root tag. My xsd
Below is the code :
public class JAXBConstructor
{
public void generateXMLDocument(File xmlDocument){
try
{
JAXBContext jaxbContext = JAXBContext.newInstance("com");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
com.ObjectFactory factory = new com.ObjectFactory();
USERTASKSImpl userTasks =(USERTASKSImpl)(factory.createUSERTASKS());
USERTASKTypeImpl userTaskType = (USERTASKTypeImpl)(factory.createUSERTASKSTypeUSERTASKType());
userTaskType.setName("zmannan");
userTaskType.setCode("G5023920");
java.util.List userTaskList=userTasks.getUSERTASK();
userTaskList.add(userTaskType);
marshaller.marshal(userTasks, new FileOutputStream("User_Task.xml"));
}
Output of the code : This does not contain the XMLSchema value -
< ?xml version="1.0" encoding="UTF-8" standalone="yes"?
< USER_TASKS xmlns="http://schemas.jpmchase.net/Recertification"
< CodeG5023920< /Code
< Namezmannan< /Name
< /USER_TASK
< /USER_TASKS
Please help how can I add the schema-instance value in the rrot tag.
I am currently uploading images to my server via HTTP POST. Everything works fine using the code below.
NSString *UDID = md5([UIDevice currentDevice].uniqueIdentifier);
NSString *filename = [NSString stringWithFormat:@"%@-%@", UDID, [NSDate date]];
NSString *urlString = @"http://taptation.com/stationary_data/index.php";
request= [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:imageData]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postbody];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(returnString);
However, when I try to convert this to work with Image Shacks XML API, it doesn't return anything. The directions from ImageShack are below.
Send the following variables via POST to imageshack. us /index.php
fileupload; (the image)
xml = "yes"; (specifies the return of XML)
cookie; (registration code, optional)
Does anyone know where I should go from here?
I have the following code:
...
sub setImage {
my $self=shift;
my $filename=shift;
unless(-r $filename) {
warn "File $filename not found";
return;
}
my $imgn=shift;
my $operation=&URI::Escape::uri_escape_utf8(
(shift) ? "???????! (Delete)" : "?????????! (Store)");
my $FH=&::File::open($filename, 0, 0);
my $image;
# &utf8::downgrade($image);
sysread($FH, $image, 102400, 0);
close $FH;
my $imginfo=eval{&Image::Info::image_info(\$image)};
if($@ or $imginfo->{"error"}) {
warn "Invalid image: ".($@ || $imginfo->{"error"});
return undef;
}
my $fields=[
DIR => $self->url("fl"),
OPERATION => $operation,
FILE_NAME => ".photo$imgn",
# FILE => [$filename],
FILE => [undef, "image.".$imginfo->{"file_ext"},
# Content_Type => $imginfo->{"file_media_type"},
# Content_Type => 'application/octet-stream',
Content => $image,
],
];
my $response=&ZLR::UA::post(
&ZLR::UA::absURL("/cgi-bin/file_manager")."",
$fields,
Content_Type => "form-data",
);
print $response->decoded_content;
}
...
When I try to use function setImage it fails with error HTTP::Message content must be bytes at /usr/lib64/perl5/vendor_perl/5.8.8/HTTP/Request/Common.pm line 91. Worse that I can't reproduce this error without using all of my code and upgrading libwww-perl does nothing. What can cause it?
I am calling a server method through HTTPService from client side. The server is a RestFul web service and it might respond with one of many HTTP error codes (say, 400 for one error, 404 for another and 409 for yet another). I have been trying to find out the way to determine what was the exact error code sent by the server. I have walked teh entire object tree for the FaultEvent populated in my fault handler, but no where does it tell me the error code. Is this missing functionality in Flex?
My code looks like this:
The HTTP Service declaration:
<mx:HTTPService id="myServerCall" url="myService" method="GET"
resultFormat="e4x" result="myServerCallCallBack(event)" fault="faultHandler(event)">
<mx:request>
<action>myServerCall</action>
<docId>{m_sDocId}</docId>
</mx:request>
</mx:HTTPService>
My fault handler code is like so:
private function faultHandler(event : FaultEvent):void
{
Alert.show(event.statusCode.toString() + " / " + event.fault.message.toString());
}
I created and deployed a pretty simple WCF Service. but when accessing it from IE, I get this :
HTTP Error 500.19 - Internal Server Error
Description: The requested page cannot be accessed because the related configuration
data for the page is invalid.
Error Code: 0x80070005
Notification: BeginRequest
Module: IIS Web Core
Requested URL: http://localhost:80/ProductsService/ProductsService.svc
Physical Path: C:\Users\Administrator\Documents\Visual Studio 2008\Projects\ProductsService\ProductsService\ProductsService.svc
Logon User: Not yet determined
Logon Method: Not yet determined
Handler: Not yet determined
Config Error: Cannot read configuration file
Config File: \\?\C:\Users\Administrator\Documents\Visual Studio 2008\Projects \ProductsService\ProductsService\web.config
Config Source: -1:
0:
More Information... This error occurs when there is a problem reading the configuration file for the Web server or Web application. In some cases, the event logs may contain more information about what caused this error.
here is the content of my web.config file :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<dataConfiguration defaultDatabase="AdventureWorksConnection" />
<connectionStrings>
<add name="AdventureWorksConnection" connectionString="Database=AdventureWorks; Server=(localhost)\SQLEXPRESS;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.serviceModel>
<services>
<service name="Products.ProductsService">
<endpoint address=""
binding="basicHttpBinding"
contract="Products.IProductsService" />
</service>
</services>
</system.serviceModel>
</configuration>
Hey,
I have an HTTP Module that I use to clean up the JSON returned by my web service (see http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx?msg=3400287#xx3400287xx for an example of this.) Basically it relates to calling cross-domain JSON web services from javascript.
There is this JsonHttpModule which uses a JsonResponseFilter Stream class to write out the JSON and the overloaded Write method is supposed to wrap the name of the callback function around the JSON, otherwise the JSON errors out as needing a label. However, if the JSON is really long, the Write method in the Stream class is called multiple times, causing the callback function to incorrectly get inserted midway through the JSON. Is there a way in the Stream class to wrap the callback function around the stream at the end or to specify that it write all of the JSON in 1 Write method instead of in chunks??
Here's where it calls the JsonResponseFilter in the JsonHttpModule:
public void OnReleaseRequestState(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
if (!_Apply(app.Context.Request)) return;
// apply response filter to conform to JSONP
app.Context.Response.Filter =
new JsonResponseFilter(app.Context.Response.Filter, app.Context);
}
Here's the Write method in the JsonResponseFilter Stream class that gets called multiple times:
public override void Write(byte[] buffer, int offset, int count)
{
var b1 = Encoding.UTF8.GetBytes(_context.Request.Params["callback"] + "(");
_responseStream.Write(b1, 0, b1.Length);
_responseStream.Write(buffer, offset, count);
var b2 = Encoding.UTF8.GetBytes(");");
_responseStream.Write(b2, 0, b2.Length);
}
Thanks for any help!
Justin
When dealing with mobile clients it is very common to have multisecond delays during the transmission of HTTP requests. If you are serving pages or services out of a prefork Apache the child processes will be tied up for seconds serving a single mobile client, even if your app server logic is done in 5ms. I am looking for a HTTP server, balancer or proxy server that supports the following:
A request arrives to the proxy. The proxy starts buffering in RAM or in disk the request, including headers and POST/PUT bodies. The proxy DOES NOT open a connection to the backend server. This is probably the most important part.
The proxy server stops buffering the request when:
A size limit has been reached (say, 4KB), or
The request has been received completely, headers and body
Only now, with (part of) the request in memory, a connection is opened to the backend and the request is relayed.
The backend sends back the response. Again the proxy server starts buffering it immediately (up to a more generous size, say 64KB.)
Since the proxy has a big enough buffer the backend response is stored completely in the proxy server in a matter of miliseconds, and the backend process/thread is free to process more requests. The backend connection is immediately closed.
The proxy sends back the response to the mobile client, as fast or as slow as it is capable of, without having a connection to the backend tying up resources.
I am fairly sure you can do 4-6 with Squid, and nginx appears to support 1-3 (and looks like fairly unique in this respect). My question is: is there any proxy server that empathizes these buffering and not-opening-connections-until-ready capabilities? Maybe there is just a bit of Apache config-fu that makes this buffering behaviour trivial? Any of them that it is not a dinosaur like Squid and that supports a lean single-process, asynchronous, event-based execution model?
(Siderant: I would be using nginx but it doesn't support chunked POST bodies, making it useless for serving stuff to mobile clients. Yes cheap 50$ handsets love chunked POSTs... sigh)
I implemented an HTTP client is iOS that is meant to be a singleton. It is a subclass of AFNetworking's excellent AFHTTPClient
My access method is pretty standard:
+ (LBHTTPClient*) sharedHTTPClient
{
static dispatch_once_t once = 0;
static LBHTTPClient *sharedHTTPClient = nil;
dispatch_once(&once, ^{
sharedHTTPClient = [[LBHTTPClient alloc] initHTTPClient];
});
return sharedHTTPClient;
}
// my init method
- (id) initHTTPClient
{
self = [super initWithBaseURL:[NSURL URLWithString:kBaseURL]];
if (self)
{
// Sub class specific initializations
}
return self;
}
Super's init method is very long, and can be found here
However the problem I experience is when the dispatch_once queue is run, the app locks and become unresponsive.
When I step through code, I notice that it locks on dispatch_once and then remains frozen. Is this something to do with the main thread locking down? How come it stays locked like that?
Also, none of the HTTP client methods fire.
Stepping through the code some more, I find this line in dispatch/once.h is where the app locks down:
DISPATCH_INLINE DISPATCH_ALWAYS_INLINE DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
void
_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block)
{
if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) {
dispatch_once(predicate, block); // App locks here
}
}